使用陣列儲存大量同類資料時,面臨固定大小的困境:
動態記憶體分配:程式執行期間根據需要即時分配/回收儲存空間,大小恰為所需。特點:
void *malloc(unsigned int size);
size 位元組的連續空間void*,需轉型)NULL,必須檢查#include <stdio.h>
#include <stdlib.h>
int main() {
int count, *array;
// 分配 10 個 int 空間,轉型為 int*,檢查 NULL
if ((array = (int *)malloc(10 * sizeof(int))) == NULL) {
printf("無法分配記憶體。\n");
exit(1);
}
for (count = 0; count < 10; count++)
array[count] = count; // 賦值
for (count = 0; count < 10; count++)
printf("%2d", array[count]); // 輸出
free(array); // 釋放!
return 0;
}
if 條件分三步:① 分配並返回指標 ② 賦給 array ③ 檢查是否為 NULL。
void free(void *p);
p 指向的記憶體區域p 必須是先前 malloc 或 calloc 返回的指標int *p1, *p2;
p1 = malloc(10 * sizeof(int));
p2 = p1; // p1、p2 指向同一塊記憶體
free(p2); // 等同 free(p1),均可釋放
malloc 負責分配,free 負責回收,兩者配合實現動態記憶體管理。