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

C語言動態內存管理核心:malloc/free 與指標的協作機制

     編輯:C 語言入門

動態內存管理的核心地位

動態內存管理配合指標,實現 C/C++ 對內存的精準控制,是系統級開發首選語言的關鍵原因。malloc/free 操作堆區,指標存儲於靜態/棧區,指向無名、無類型的堆內存塊。

malloc / free 原型


void *malloc(size_t size);   // 分配 size 字節,返回首地址
void free(void *ptr);        // 釋放 ptr 指向的堆塊

函數原型

指標的角色

  • 靜態/棧區變量:有名、有型、直接訪問。
  • 堆區塊:無名、無型、只能通過指標間接訪問。
  • 分配返回 void*,使用前必須強制轉型為具體類型指標。

malloc/free 使用示例


#include 
#include 

int main() {
    int *p = malloc(10 * sizeof(int));
    if (!p) { perror("malloc"); return 1; }
    for (int i = 0; i < 10; i++) p[i] = i * i;
    for (int i = 0; i < 10; i++) printf("%d ", p[i]);
    free(p);
    p = NULL;  // 防野指標
    return 0;
}

動態內存優勢:按需分配

班級成績統計:人數不定,靜態陣列要么浪費要么溢出。動態分配:


int n; scanf("%d", &n);
int *scores = malloc(n * sizeof(int));
// 使用 scores[0..n-1]
free(scores);

鏈表是動態內存極致體現:零到無限節點,按需增刪。

靜態 vs 動態鏈接補充

靜態鏈接 動態鏈接

  • 靜態鏈接:.o + .a → exe,庫代碼內含,體積大、多進程重複載入。
  • 動態鏈接:.o + .so → exe,運行時載入共享庫,節省空間、易升級。

總結

動態內存管理是 C 語言掌控計算機資源的核心機制。理解 堆/棧/靜態區分工、指標作為堆塊句柄、malloc/free 成對使用、野指標預防,是寫出健壯系統代碼的基礎。

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