C語言野指標的產生原因及避免辦法

2021-07-05 04:06:45 字數 800 閱讀 5568

見如下程式例項:

#include #include int main()

printf("p1:%d, &p1:%d\n",p1,&p1);

if(p1 != null) //目的:釋放p1

printf("p1:%d, &p1:%d\n",p1,&p1);

system("pause");

return 0;

}

程式執行結果為:

p1:0, &p1:2031188

p1:2233584, &p1:2031188

p1:2233584, &p1:2031188

請按任意鍵繼續. . .

由結果看出,p1並不為0,也就是在釋放p1時,僅僅釋放的是p1指向的記憶體空間,並沒有將指標p1指為空,此時p1就成了野指標!

避免策略--養成乙個習慣:

1、在定義乙個指標時初始化為null

2、釋放指標指向的記憶體空間時,將指標重置為null

即修改後上述例項**為:

#include #include int main()

printf("p1:%d, &p1:%d\n",p1,&p1);

if(p1 != null) //目的:釋放p1

printf("p1:%d, &p1:%d\n",p1,&p1);

system("pause");

return 0;

}

參考:傳智播客掃地僧老師



野指標產生的原因和避免方法

struct student stu,pstu intmain void 這是很多人都容易犯的錯誤 定義了結構體變數stu,但結構體內部的char name在定義結構體時只是為其分配了4位元組的記憶體,沒有指向乙個合法的位址,這時其指標指向的區域只是一些亂碼,有事還沒有訪問許可權。這就是我們通常所說...

野指標的產生及其避免

野指標的產生及其避免 null 避免,而只能通過養成良好的程式設計習慣來盡力減少。對野指標進行操作很容易造成程式錯誤。總的來說,野指標是一種記憶體錯誤。其產生的原因主要有一下幾點 1 訪問了不該訪問的記憶體 如果我們的指標變數沒有被我們初始化,系統會為我們的編譯器隨機為我們的指標指定記憶體。既然是系...

野指標產生原因及解決辦法

原因 指標變數宣告時沒有被初始化。解決辦法 指標宣告時初始化,可以是具體的位址值,也可讓它指向null。原因 指標 p 被 free 或者 delete 之後,沒有置為 null。解決辦法 指標指向的記憶體空間被釋放後指標應該指向null。原因 指標操作超越了變數的作用範圍。解決辦法 在變數的作用域...