一把梭系列 ~ C語言範例 (0018) [指標與動態配置記憶體 – malloc、free]

一把梭系列 ~ C語言範例 (0018) [指標與動態配置記憶體 – malloc、free]

一把梭系列 ~ C語言範例 (0018) [指標與動態配置記憶體 – malloc、free]


資料來源: https://openhome.cc/Gossip/CGossip/MallocFree.html

https://www.cplusplus.com/reference/cstdlib/malloc/
https://www.cplusplus.com/reference/cstdlib/free/


線上執行: https://www.tutorialspoint.com/compile_c_online.php

★前言:

★主題:

    C/C++一般陣列的大小必須在宣告時就明確告知,但有些程式情況卻無滿足該條件,此時就要使用此方法來克服了


01.動態配置記憶體

void* malloc (size_t size);

02.釋放動態配置記憶體

void free (void* ptr);


★code

#include <stdio.h>      /* printf, scanf, NULL */
#include <stdlib.h>     /* malloc, free, rand */
#include <time.h>       /* time */

int main ()
{
    int i,n;
    char *buffer='\0';

    printf ("How long do you want the string? ");
    scanf ("%d", &i);

    buffer = (char *) malloc (sizeof(char)*(i+1));
    if (buffer=='\0') exit (1);

    srand (time(NULL));//初始亂數種子
    for (n=0; n<i; n++)
    {
        buffer[n]=rand()%26+'a';//取1~26的亂數+a字元的ASCII CODE 進而 產生亂數字串
    }
    buffer[i]='\0';
    printf ("Random string: %s\n",buffer);

    free (buffer);
    buffer='\0';

    return 0;
}


★結果:


★延伸說明/重點回顧:


    01.C/C++一般陣列的大小必須在宣告時就明確告知,但有些程式情況卻無滿足該條件,此時就是要使用動態配置來解決。


    02.『動態配置記憶』雖然很方便,但是這也是一把雙面刃,如果沒有對稱(成對)的使用『釋放動態配置記憶』就會造成『記憶體洩漏』的問題,如果情況嚴重可能會造成程式錯誤,必須非常小心使用


One thought on “一把梭系列 ~ C語言範例 (0018) [指標與動態配置記憶體 – malloc、free]

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *