迷途指標 new delete

2021-09-06 21:35:33 字數 1196 閱讀 5044

程式設計中有一種很難發現的錯誤是迷途指標。迷途指標也叫懸浮指標、失控指標,是黨對乙個指標進行delete操作後——這樣會釋放它所指向的記憶體——並沒有把它設定為空時產生的。而後,如果你沒有重新賦值就試圖再次使用該指標,引起的結果是不可預料的。

空指標和迷途指標的區別?

當delete乙個指標的時候,實際上僅是讓編譯器釋放記憶體,但指標本身依然存在。這時它就是乙個迷途指標。

當使用以下語句時,可以把迷途指標改為空指標:

myptr=0;

通常,如果在刪除乙個指標後又把它刪除一次,程式就會變得非常不穩定,任何情況都有可能發生。但是如果你只是刪除了乙個空指標,則什麼事都不會發生,這樣做非常安全。

使用迷途指標或空指標(如果myptr=0)是非法的,而且有可能造成程式崩潰。如果指標是空指標,儘管同樣是崩潰,但它同迷途指標的崩潰相比是一種可預料的崩潰。這樣除錯起來會方便得多。

例如,

#include#include

using

namespace

std;

typedef unsigned

short

intushort;

intmain()

此時執行結果:

*pint還是指向原來的記憶體,因此將plong的資料修改了,但是結果是錯誤的而並沒有儲存。。

加入將pint=0;這句加上,此時執行結果直接報錯,因為pint指向空指標,不能訪問空指標。

c++中已經有了malloc/free,為什麼還需要new/delete?

malloc與free是c++/c語言的標準庫函式,new/delete是c++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

對於非內部資料型別的物件而言,光用malloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行析構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制許可權之內,不能夠把執行建構函式和析構函式的任何強加於malloc/free。

因此c++語言需要乙個能完成動態記憶體分配和初始化工作的運算子new,以及乙個能完成清理和釋放記憶體工作的運算子delete。new/delete不是庫函式,而是運算子。

避免記憶體洩露 迷途指標

記憶體洩露產生 沒有釋放在堆中申請的記憶體。從makecat函式返回乙個指標,之後再main函式裡釋放記憶體。我認為,最好封裝在函式裡,new和delete看起來才有對稱感。還需要再改進。既然提到了,就說一下迷途指標和記憶體洩露的原理和避免方法 迷途指標 將delete用於指標,但沒有將指標置為空而...

空指標和迷途指標的區別

解釋 include int main int pint new int pint 10 cout pint delete pint pint 0 pint 20 oh no,this was deleled.cout pint 迷途指標也叫懸浮指標,失控指標,是對乙個指標delete後 這樣會釋放...

c 野指標(迷途指標)的理解

date 2018.12.16 直接上程式 include using namespace std int main int pint new int pint 10 cout pint迷途指標也叫懸浮指標,失控指標,是對乙個指標delete後 這樣會釋放它所指向的記憶體 並沒有把它設定為空時產生的...