首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

鏈表的 C 語言實現(一):動態記憶體分配基礎

     編輯:C 語言基礎

為什麼需要動態記憶體分配?

使用陣列儲存大量同類資料時,面臨固定大小的困境:

  • 大小必須在編譯時決定(靜態記憶體分配)
  • 多數情況浪費大量記憶體
  • 少數情況大小不足導致下標越界、嚴重錯誤

動態記憶體分配:程式執行期間根據需要即時分配/回收儲存空間,大小恰為所需。特點:

  1. 無需預先分配儲存空間
  2. 空間可根據程式需要動態擴大或縮小

核心函數

1. malloc - 分配記憶體

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。

2. free - 釋放記憶體

void free(void *p);
  • 釋放指標 p 指向的記憶體區域
  • p 必須是先前 malloc 或 calloc 返回的指標
  • 傳遞其他值會導致災難性後果
  • 重要的是指標的值(位址),而非指標變數本身

指標別名與 free

int *p1, *p2;
p1 = malloc(10 * sizeof(int));
p2 = p1;      // p1、p2 指向同一塊記憶體
free(p2);     // 等同 free(p1),均可釋放

malloc 負責分配,free 負責回收,兩者配合實現動態記憶體管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved