「野指標」的成因主要有兩種:
(1)指標變數沒有被初始化。任何指標變數剛被建立時不會自動成為null指標,它的預設值是隨機的,它會亂指一氣。所以,指標變數在建立的同時應當被初始化,要麼將指標設定為null,要麼讓它指向合法的記憶體。例如
char *p = null;
char *str = (char *) malloc(100);
(2)指標p被free或者delete之後,沒有置為null,讓人誤以為p是個合法的指標。
別看free和delete的名字惡狠狠的(尤其是delete),它們只是把指標所指的記憶體給釋放掉,但並沒有把指標本身乾掉。
如果程式比較長,我們有時記不住p所指的記憶體是否已經被釋放,在繼續使用p之前,通常會用語句if (p != null)進行防錯處理。很遺憾,此時if語句起不到防錯作用,因為即便p不是null指標,它也不指向合法的記憶體塊。
char *p = (char *) malloc(100);
strcpy(p, 「hello」);
free(p); // p 所指的記憶體被釋放,但是p所指的位址仍然不變
…if(p != null) // 沒有起到防錯作用
(3)指標操作超越了變數的作用範圍。這種情況讓人防不勝防,示例程式如下:
class a
}; void test(void)
p->func(); // p是「野指標」
}
總結
#define _crt_secure_no_warnings
#include
#include
#include
//野指標產生的原因
//指標變數和它所指向的記憶體空間變數是兩個不同的概念
// 釋放了指標所致的記憶體空間 但是指標變數本身沒有重置成null
//造成釋放的時候 通過if (p1 != null)
//避免方法: 1)定義指標的時候 初始化成null 2)釋放指標所指向的記憶體空間後,把指標重置成null。
void main11()
strcpy(p1, "11112222");
printf("p1:%s \n", p1);
if (p1 != null)
//if (p1 != null)
printf("hello...\n");
system("pause");
return ;
}
c語言野指標
1.什麼是野指標 野指標是隨機指向一塊記憶體的指標,容易造成記憶體洩露。但不一定每次都會產生段錯誤,因為可能分配到已經分配或申請過的位址。2.如何避免野指標 避免野指標需要養成一下良好的編碼習慣 1 當指標沒有指向時,給它置為空 0位址 null 因為在作業系統中,不能對0位址進行任何操作 置為空 ...
C語言野指標分析
1.野指標的概念 所謂的野指標,就是說指標指向的那塊記憶體,你沒有合法操作的許可權,也就是指標指向非法的記憶體空間,這樣的指標就叫做野指標。2.野指標產生的原因 1 指標變數未初始化 任何指標變數剛被建立時不會被自動置為null,它的預設值是隨機的,所以這塊記憶體,所以指標變數在建立時,要麼初始化讓...
C語言記憶體(野指標 )
1.堆 在鍊錶中找接近4位元組的空間,發現 5位元組接近 4位元組,將 5位元組給程式。2.靜態儲存區 編譯時就存在 儲存全域性變數和靜態區域性變數 3.野指標 1 區域性指標變數沒有初始化 struct student char name int number int main struct st...