野指標和free總結超有用

2021-10-12 17:31:26 字數 881 閱讀 4061

所指向的記憶體未申請

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 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...