一把梭系列 ~ 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]”
Youtube URL: https://youtu.be/lUg3xKVY3BA