標頭檔案:#include
malloc() 函式
原型為:
void* malloc (size_t size);
【引數說明】size 為需要分配的記憶體空間的大小,以位元組(byte)計。
【函式說明】malloc() 在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。如果希望在分配記憶體的同時進行初始化,請使用
calloc()
函式。【返回值】分配成功返回指向該記憶體的位址,失敗則返回 null。
由於申請記憶體空間時可能有也可能沒有,所以需要自行判斷是否申請成功,再進行後續操作。
如果 size 的值為 0,那麼返回值會因標準庫實現的不同而不同,可能是 null,也可能不是,但返回的指標不應該再次被引用。
注意:函式的返回值型別是 void *,void 並不是說沒有返回值或者返回空指標,而是返回的指標型別未知。
所以在使用 malloc() 時通常需要進行強制型別轉換,將 void 指標轉換成我們希望的型別,例如:
char *ptr = (char *)malloc(10); // 分配10個位元組的記憶體空間,用來存放字元
動態記憶體分配舉例:
#include /* printf, scanf, null */
#include /* malloc, free, rand, system */
int main ()
{ int i,n;
char * buffer;
printf ("輸入字串的長度:");
scanf ("%d", &i);
buffer = (char*)malloc(i+1); // 字串最後包含 \0
if(buffer==null) exit(1); // 判斷是否分配成功
// 隨機生成字串
for(n=0; n
執行結果:
輸入字串的長度:20
隨機生成的字串為:phqghumeaylnlfdxfirc
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...