Memory Allocation

1. malloc(size_t size)

  • 用途:配置指定大小的記憶體區塊
  • 回傳值:回傳 void * 指標,指向配置的記憶體起始位置;失敗則回傳 NULL
  • 特性:配置的記憶體內容是未初始化的,裡面可能有任意的垃圾值
int *arr = (int *)malloc(10 * sizeof(int));  // 配置 10 個 int 的空間

2. calloc(size_t nobj, size_t size)

  • 用途:配置 nobj 個物件,每個大小為 size bytes
  • 特性:與 malloc 不同,calloc 會將配置的記憶體初始化為 0
  • 使用時機:當你需要確保記憶體內容為零時使用
int *arr = (int *)calloc(10, sizeof(int));  // 配置 10 個 int,且全部初始化為 0

3. realloc(void *ptr, size_t newsize)

  • 用途:調整已配置記憶體的大小
  • 運作方式
    • 如果新大小較大,可能會搬移到新位置
    • 如果新大小較小,會縮小記憶體區塊
    • 原本的內容會被保留(在新大小範圍內)
arr = (int *)realloc(arr, 20 * sizeof(int));  // 擴展為 20 個 int