C 使用delete釋放記憶體

2022-09-25 16:45:07 字數 906 閱讀 3198

當需要記憶體時,可以使用new來請求,這只是c++記憶體管理資料報中有魅力的乙個方面。另乙個方面是delete運算子,它使得在使用完記憶體後,能夠將其歸還給記憶體池。這是通向最有效的使用記憶體的關鍵一步。歸還或釋放(free)的記憶體可供程式的其他部分使用。使用delete時,後面要加上指向記憶體塊的指標(這些記憶體塊最初是new分配的):

int * ps = new int;   // allocate memory with new

.  .  .                       // use the memory

delete ps;              // free menory with delete when done

這將釋放ps指向的記憶體,但不會刪除指標ps本身。例如,可以將ps重新指向另乙個新分配的記憶體塊。一定要配對地使用new和delete;否則將發生記憶體洩漏(menory leak),也就是說,被分配的記憶體再也無法使用了。如果記憶體洩漏嚴重,則程式將由於不斷尋找更多的記憶體而終止。

不要嘗試釋放已經釋放的記憶體塊,c++標準指出,這樣做的結果殭屍不確定的,這意味著什麼情況都有可能發生。另外,不能使用delete來釋放宣告變數所獲得的記憶體:

int * ps = new int;

delete ps;

delete ps;

int jugs = 5;

int * pi = &jugs;

delete pi;

警告:只能用delete來釋放使用new分配的記憶體。然而,對空指標使用delete是安全的。

int * ps = new int;

int * pg = ps;

delete pg;

一般來說,不要建立兩個指向用乙個記憶體塊的指標,因為這將增加錯誤的刪除同乙個記憶體塊兩次的可能性。對於返回指標的函式,使用另乙個指標確實有道理。

delete 與 delete 釋放記憶體

以下內容來引自 我們通常從教科書上看到這樣的說明 delete 釋放new分配的單個物件指標指向的記憶體 delete 釋放new分配的物件陣列指標指向的記憶體 那麼,按照教科書的理解,我們看下下面的 int a new int 10 delete a 方式1 delete a 方式2 肯定會有很多...

指標與delete釋放記憶體

下表列出了 c 支援的其他一些重要的運算子。運算子描述 sizeof sizeof 運算子返回變數的大小。例如,sizeof a 將返回 4,其中 a 是整數。condition x y 條件運算子。如果 condition 為真 則值為 x 否則值為 y。逗號運算子會順序執行一系列運算。整個逗號表...

delete釋放new 開闢的記憶體

直接看下面這道題 使用 char p new char 10 申請一段記憶體,然後使用delete p釋放,有什麼問題?a 會有記憶體洩露 b 不會有記憶體洩露,但不建議用 c 編譯就會報錯,必須使用delete p d 編譯沒問題,執行會直接崩潰 這道題題目開闢的是10個char型別的空間,因為是...