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

高品質 C++/C 程式設計指南 第 7 章 (一):記憶體三大分配方式與五大常見錯誤對策

     編輯:關於C++

比爾·蓋茨的失言

「640K ought to be enough for everybody」 — Bill Gates, 1981

記憶體管理是雷區,**唯有發現並排除所有地雷才能安全通行**。本章深度遠超普通教材,請精讀。

7.1 記憶體三大分配方式

方式區域生命週期範例
靜態儲存區.data/.bss程式全程全域變數、static 變數
堆疊Stack函數呼叫期間區域變數、函數參數
堆積Heap程式設計師控制malloc/new 分配,free/delete 釋放
  • 堆疊:CPU 指令集內建,極快,但容量有限 (通常 1-8MB)。
  • 堆積:靈活、大、但管理複雜、**問題最多**。

7.2 五大常見記憶體錯誤與鐵律對策

錯誤成因鐵律對策
分配失敗卻使用新手以為分配必成功規則 7-2-1:用前必檢 if(p==nullptr);參數用 assert(p!=nullptr)
未初始化即引用無初始化觀念 / 以為預設為 0規則 7-2-2:無論何種方式建立陣列,**必賦初值** (哪怕是 0)
越界操作下標「多 1」或「少 1」,for 迴圈易出錯規則 7-2-3:避免越界,特別警惕 ±1
忘記釋放 → 記憶體洩漏動態分配/釋放次數不等規則 7-2-4:malloc/free、new/delete **次數必等**
釋放後繼續使用物件關係複雜/返回棧指標/釋放未置空規則 7-2-5:free/delete 後**立即置 nullptr**,防野指標

7.3 指標 vs 陣列:相似卻不同

  • 陣列:靜態區或堆疊,**地址與容量固定**,唯內容可變。
  • 指標:隨時指向任意記憶體,**可變性強** → 靈活但危險。

下節將以字串為例深度對比。

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