C C 中程式在使用堆記憶體時的記憶體復用問題

2022-09-23 23:57:09 字數 473 閱讀 8458

在乙個c/c++程式中,如果使用了堆記憶體的管理機制,那麼記憶體究竟是怎麼分配與**的呢?

先看乙個程式:

#include

using namespace std;

int main (void)

這裡是因為程式使用了堆的記憶體管理機制,存在記憶體復用的問題。整個過程是:在程式釋放了x的把記憶體時,緊接著又分配了z的記憶體,這就是問題的所在,因為這時的z佔據了原來是x的記憶體,這就是說現在x和z的位址相同!!!這時乙個可怕的bug,因為乙個本該是無效的指標x現在卻可以改變有效指標z指向的內容!!那怎麼辦呢?其實我們可以這樣,每次將乙個指標指向的堆記憶體空間釋放的時候,都將指標清空,即要在delete之後加上這句**:

x = null; 或者 x = 0;

雖然將乙個指標清空可能使程式崩潰,但是我們寧願使程式崩潰也不願意讓程式變得極難除錯,因為當程式崩潰時,我們觀察一下即可發現問題所在,但是像上面那樣的程式是很難找到問題出在哪的!!!

C C 程式編譯時記憶體分配

1 從靜態儲存區域分配 內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快 不容易出錯,因為有系統會善後。例如全域性變數,static變數等。2 在棧上分配 在執行函式時,函式內區域性變數的儲存單元都在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器...

OC中程式的記憶體分布 類載入

類載入 一句話形容就是在類第一次使用時載入到 段,直到程式結束時才釋放。oc中的記憶體分布 從下往上依次是 段 存放 資料段 已初始化全域性變數和靜態變數 bss段 未初始化的全域性變數和靜態變數 堆區 new malloc 等分配的空間 棧區 區域性變數 假設在main函式中宣告 假設person...

c c 程式的記憶體分配

我一直迴避程式的記憶體管理,因為愛之愈深,恨之愈烈。但是,還是由很多的朋友一直在體這方面的問題,所以就索性把它坦白了,也許對你我都是一件好事情。首先,需要搞清楚 變數的型別和它的儲存類別是兩個概念。資料型別和記憶體管理沒有直接的關係。乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 s...