記憶體洩漏與野指標

2021-09-28 15:04:32 字數 604 閱讀 1085

當你要為變數a申請一塊記憶體空間的時候,需要用到malloc函式。如何申請這塊記憶體空間呢?這就變成程式的工作了。程式首先會向系統申請一塊記憶體空間,然後程式會把申請好的這塊記憶體空間的首位址賦給變數a,假設這時候變數a拿到的首位址為0x1234,如果我們現在要對變數a進行迴圈操作,那麼每迴圈一次,變數a就會拿到乙個新的首位址,這樣的話,記憶體空間就會被不斷的分配給變數a。

但是現在要注意的是每拿到一次新的首位址,舊的首位址就會被覆蓋,但是舊的記憶體空間的使用權依然在程式手裡。這裡要分清楚兩個概念,系統和程式。通常情況下,是由程式向系統申請空間,空間的分配權在系統手裡。雖然舊的位址唄覆蓋,但是使用權依舊掌握在程式手中,所以,程式能使用的空間越來越少,最終導致記憶體不夠而洩露。

當程式向系統申請一塊記憶體空間時候,程式會把申請號好的這塊記憶體空間的首位址賦給變數a,假設變數a拿到的首位址是0x3456,那麼當這塊空間使用完成被free釋放了之後,這塊空間的使用權又被程式還給了系統,但是這個時候如果沒有給變數a賦null值,那麼變數a手裡拿到的依舊還是這個首位址0x3456,這個位址是沒有被銷毀的,所以既然它有乙個首位址,那麼就可以指向乙個位址,但是,由於這個位址所在的記憶體空間的使用權已經不屬於程式,因此,這個時候變數a的指向操作就是不合法的,這樣的指標就被稱為野指標。

關於 記憶體洩漏,野指標

記憶體洩漏 動態申請的記憶體空間沒有正常釋放,但也不能繼續使用 char a new char a char b new char b a b a 的空間未被釋放,也無法訪問,形成記憶體洩漏 基類的析構函式應設定為virtual,否則基類指標指向子類物件,呼叫基類析構時不會呼叫子類的析構函式,而造成...

記憶體洩漏與指標懸掛 野指標介紹

記憶體洩漏概念 記憶體洩漏時指動態申請的記憶體空間沒有正常釋放,但是也不能繼續使用的情況。例如 char ch1 ch1 new char a char ch2 new char ch1 ch2 程式執行後,指標ch1和ch2指向同乙個位址單元,而原來的ch1所申請的存放字元a的空間就不可能再使用,...

C C 中的記憶體洩漏 記憶體溢位 野指標

記憶體溢位 野指標發生原因class object object intmain class object1 int main 發生原因 為什麼說strcpy和strncpy是c 的危險函式 2.strncpy strncpy dest,src,sizeof dest dest sizeof des...