懸掛指標與野指標

2021-07-23 07:24:38 字數 875 閱讀 8205

(owed by: 春夜喜雨

懸掛指標/dangling pointers/迷途指標/懸垂指標

野指標/wild pointers

懸掛指標是由於:指標的指向記憶體被刪除導致

例子1:

退出if的範圍之後,c變數不再存在,p指向的位址被作業系統**了。

指標被懸掛了,後續如果再被使用就會有問題。

int *p = nullptr;

if (p == nullptr)

int c = 100;

p = &c;

例子2:變數p指向被釋放了,指標被懸掛了,後續如果再被使用就會有問題。

int *p = nullptr;

int *q = new int

p = q;

delete q;

野指標多是由於:指標變數未初始化

例如下面的p指標未被初始化,它的指向就可能是隨機的,再vs除錯狀態時,通常會偵錯程式置為0xcccccccc,但再release-非除錯狀態時,值就不可預期了。

// 不初始化它的指向位置

int *p;

定位這類問題的時候:

有些時候碰到

1.      debug不重現,release重現;

2.      debug/release調測狀態均不重現,release非調測狀態可以重現

3.     優化o2啟用重現,優化不啟用不重現(發現一例,由虛函式引起)

可以從這幾個方面先分析一下。另外定位的時候,新增調測日誌的方法/window上outputdebugstr類似方法都是比較可行的方法。

(owed by: 春夜喜雨

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

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

什麼是記憶體洩漏?野指標?懸掛指標?空指標異常?

1.q 什麼是記憶體洩漏?a 用動態儲存分配函式動態開闢的控制項,在使用完畢後沒有釋放,結果導致一直佔據該記憶體單元,直到程式結束,稱為記憶體洩漏。2.q 什麼是野指標?成因 1 指標變數沒有初始化 2 指標被free delete後,沒置null 3 不要返回指向棧記憶體的指標或引用,因為棧內存在...

空指標與野指標

首先什麼是空型別呢,空型別就是void,自然,空型別指標就是void void 可以指向任何型別物件的位址,表示這是乙個指標,和位址值有關,但不知道儲存在此位址上的物件的型別,所以在取空型別指標所指向的值的時候,應將空型別指標轉換為對應的指標型別 int a 10 char b a float c ...