/* 需要手動計算記憶體大小,未初始化 */ int *p = (int *)malloc(20 * sizeof(int)); /* 不需要手動計算記憶體大小,初始化為0 */ int *q = (int *)calloc(20, sizeof(int)); /* 動態記憶體 擴大/縮小
* 1.成功分配: * 1.1 回傳地址相同, 原記憶體后 有 空余記憶體,回傳原來指標的地址; * 1.2 回傳地址不同, 原記憶體后 沒有 空余記憶體,新分配一塊兒記憶體,并把原來的記憶體內容拷貝過來,原來的記憶體釋放掉;
* 2.失敗回傳NULL: * 2.1 原記憶體不釋放, 重新分配的記憶體過大,分配失敗,回傳NULL,原記憶體不釋放; * 2.1 原記憶體釋放, 原指標不為NULL, 重新分配的大小為0,回傳NULL,原記憶體釋放,realloc(p, 0) === free(p);別這么用!
* 3.擴容后的記憶體較原來的小,資料會丟失
*/
int *pp = (int *)realloc(p, (20 + 10) * sizeof(int));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/40834.html
標籤:C
上一篇:C 實戰練習題目3
下一篇:C 實戰練習題目4
