C語言malloc()函式:動態分配記憶體空間

2puT發表於2016-07-19
標頭檔案:#include <stdlib.h>

malloc() 函式用來動態地分配記憶體空間(其原型為:
void* malloc (size_t size);

【引數說明】size 為需要分配的記憶體空間的大小,以位元組(Byte)計。

【函式說明】malloc() 在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。如果希望在分配記憶體的同時進行初始化,請使用 calloc() 函式。

【返回值】分配成功返回指向該記憶體的地址,失敗則返回 NULL。

由於申請記憶體空間時可能有也可能沒有,所以需要自行判斷是否申請成功,再進行後續操作。

如果 size 的值為 0,那麼返回值會因標準庫實現的不同而不同,可能是 NULL,也可能不是,但返回的指標不應該再次被引用。

注意:函式的返回值型別是 void *,void 並不是說沒有返回值或者返回空指標,而是返回的指標型別未知。所以在使用 malloc() 時通常需要進行強制型別轉換,將 void 指標轉換成我們希望的型別,例如:
  1. char *ptr = (char *)malloc(10); // 分配10個位元組的記憶體空間,用來存放字元

動態記憶體分配舉例:
  1. #include <stdio.h> /* printf, scanf, NULL */
  2. #include <stdlib.h> /* malloc, free, rand, system */
  3. int main ()
  4. {
  5. int i,n;
  6. char * buffer;
  7. printf ("輸入字串的長度:");
  8. scanf ("%d", &i);
  9. buffer = (char*)malloc(i+1); // 字串最後包含 \0
  10. if(buffer==NULL) exit(1); // 判斷是否分配成功
  11. // 隨機生成字串
  12. for(n=0; n<i; n++)
  13. buffer[n] = rand()%26+'a';
  14. buffer[i]='\0';
  15. printf ("隨機生成的字串為:%s\n",buffer);
  16. free(buffer); // 釋放記憶體空間
  17. system("pause");
  18. return 0;
  19. }
執行結果:
輸入字串的長度:20
隨機生成的字串為:phqghumeaylnlfdxfirc

該程式生成一個指定長度的字串,並用隨機生成的字元填充。字串的長度僅受限於可用記憶體的長度。

相關文章