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

C++ new/delete 底層機制揭秘:從彙編看內存分配與懸垂指針

     編輯:C++ 入門

實驗環境

  • 編譯器:MSVC (VS2010) Debug 模式
  • 代碼片段:
    int *obj = new int(6);
    delete obj;
    int *obj2 = new int(7);
    cout << *obj; // 輸出 7!

彙編級分析(關鍵指令註釋)

// 1. 釋放後立即置空
delete obj;
obj = nullptr;          // 或 obj = NULL;

// 2. 使用智能指針(C++11 起推薦)
std::unique_ptr obj = std::make_unique(6);
// 自動釋放,無懸垂風險

// 3. 釋放後不再使用該指針,嚴禁二次讀寫

總結

new 做三件事:分配原始內存 → 調用構造函數 → 返回類型化指針。delete 做兩件事:調用析構函數 → 釋放內存。指針變量本身屬於棧,不受 delete 影響。理解這一點,是避免「use-after-free」漏洞的基礎。

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