今天介紹malloc, calloc, realloc 基本用法(實務建議)
好的習慣(避免犯錯):
int *arr = malloc(n * sizeof arr);
if (arr == NULL) { / 處理配置失敗 */ }
sizeof *arr 的寫法能避免你把型別寫錯(改變 arr 型別時不用改 sizeof)
在 C(非 C++)中 不需要把 malloc 的回傳強制 cast(避免掩蓋忘了包含 <stdlib.h> 的錯誤)。
差別:
malloc(bytes):分配未初始化的 bytes bytes
calloc(nitems, size):分配 nitems * size bytes,並且初始化為全 0(常用於希望初值為 0 的情況)
realloc(ptr, new_size):調整 ptr 指向的記憶體大小(可能搬移到新區塊)。使用方法要小心檢查回傳值
範例:
int *a = malloc(n * sizeof *a); // 分配 n 個 int
int *b = calloc(n, sizeof *b); // 分配並清 0
// 使用完畢
free(a);
free(b);