所指向的記憶體未申請
2.所指向的記憶體被釋放
當你訪問乙個未申請的記憶體區域時,系統會判定我們沒有許可權,無法訪問。記憶體被釋放後你再訪問,結果完全不可預知,很大機率會出現段錯誤(segmentation fault),這是提示你訪問越界了。
野指標怎麼出現的?
在**中以下幾種情況會出現野指標:
1.指標宣告後未初始化
這種情況下編譯器一般會給出乙個 warning警告,自己要注意避免。
2.指標指向的空間被free後,沒有被重置為null,或者指向乙個有效的記憶體區域、
在free後要及時處理被free的指標,例如令其指向null。
野指標該如何避免?
1.在指標宣告時,要養成將其初始化的習慣。如下:
int *p = null;
預設將其初始化為null
2.在free後面,加上重置指標的**,如下:
free§;
p = null;
重置為null
為了便於理解,下面貼上乙份**:
#include
#include
#include
int main(int argc,char *ar**)
strcpy(p,"12321323213"); //向記憶體拷貝值
printf("p : %s\n",p); //列印值
if(p!=null)
//free釋放的是指標所指向的記憶體空間,而不是指標的值。
//所以釋放後指標還是指向原來的位址
if(p1!=null)
getchar();
return 0;參考學習資料
指標c語言控制led燈
輸入和輸出
c語言玩轉鍊錶
C 基礎 指標 野指標和free
野指標的重複釋放問題 最近發現了這樣乙個問題,乙個指標釋放兩次之後,若在中間不置空,會報invalid address specified to rtlvalidateheap 無效的堆位址 錯誤。include include include using namespace std int mai...
野指標和懸空指標
一 野指標 產生的原因 1 指標定義時未被初始化 指標在被定義的時候,如果程式不對其進行初始化的話,它會指向隨機區域,因為任何指標變數 除了static修飾的指標變數 在被定義的時候是不會被置空的,它的預設值是隨機的。2 指標被釋放時沒有被置空 我們在用malloc開闢記憶體空間時,要檢查返回值是否...
空指標和野指標
關於多次free 出現的野指標的原因 指標變數和指標變數所指的記憶體空間變數是兩個不同的概念 free 最主要釋放的指標變數所指的記憶體空間,因為記憶體資源是有限的,很寶貴,需要 利用 但是指標變數本身的值還是之前的指向,未重置成null 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...