野指標,是看上去指向合法記憶體,實際該記憶體已經釋放;或未初始化的指標。
"野指標"的成因主要有3種:
(1)指標變數未被初始化。任何指標變數被建立時不會自動成為null指標,它的預設值為隨機。
指標變數在建立的同時必須被初始化。
char
*p =
null
;//將指標設定為null
char
*str = new char
(100);
//將指標指向定義變數
(2)指標p被free(釋放)或者delete(刪除)之後,沒有置為null;
當指標沒有使用價值時,記得釋放,釋放成功後記得為該指標賦值null。
if
(null
!= p)
//檢驗使用完指標後,釋放該指標所指向的記憶體。
(3)指標操作越出變數的作用範圍:
class a};
void
test
(void
) p->
func()
;//p未被初始化
}
(4)可以使用引用替代指標:
引用具有指標的功能,同時具有普通變數的功能。引用的變數必須真實存在。引用作為函式的輸入引數比指標更直接的效果。
void
swap
(int
*p1,
int*p2)
//指標實現兩數交換
void
swap
(int
&p1,
int&p2)
//引用實現兩數交換
5)使用智慧型指標:
如果不同物件都需要訪問堆上的同乙份指標,智慧型指標可以有效地避免野指標。用智慧型指標(推薦shared_ptr)進行包裝,不同物件可擁有智慧型指標包裝後的指標,每次訪問之前使用智慧型指標的方法_expired進行指標的有效性檢查,如果失敗,則表明該物件已經被釋放。
什麼是野指標?野指標的危害?如何避免野指標?
什麼是野指標?野指標是指隨機指向一塊記憶體的指標 野指標的危害?如何避免野指標?我們要在以後養成良好的編碼習慣 1.將沒有指向的指標初始化指向null 指向null的指標不能對他的指向進行修改 2.當想給乙個指標指向的空間賦值時,一定要給這個指標分配空間 malloc 3.當空間分配完後,要檢查這個...
什麼是野指標?如何避免野指標?
野指標不是 null指標,它是隨即指向一塊記憶體的指標。野指標是很危險的,會導致記憶體洩漏,if語句對它不起作用。導致野指標的原因有兩種 1 野指標指向了一塊沒有訪問許可權的記憶體。即指標沒有初始化 2 野指標指向了乙個已經釋放的記憶體。因為野指標是因為我們的不良程式設計習慣造成的,所以我們養成良好...
關於野指標
什麼是野指標?例如 int p 或 int p new int 1 int i 3 p i delete p 像上面的例子所示的,沒有對p申請指定的訪問記憶體區域 也就是說p指標的指向是隨機的,指向的是記憶體空間的隨機位址 或是p 指向乙個已刪除的物件,出現像這樣的指標成為野指標。野指標的危害 就是...