和野指標相關的編碼習慣

2021-07-25 02:59:52 字數 1068 閱讀 5740

見如下程式例項:

[cpp]view plain

copy

print?

#include 

#include 

intmain()  

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

,p1,&p1);  

if(p1 != null)              

//目的:釋放p1

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

,p1,&p1);  

system("pause"

);  

return

0;  

}  程式執行結果為:

[cpp]view plain

copy

print?

p1:0, &p1:2031188  

p1:2233584, &p1:2031188  

p1:2233584, &p1:2031188  

請按任意鍵繼續. . .  

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

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

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

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

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

[cpp]view plain

copy

print?

#include 

#include 

intmain()  

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

,p1,&p1);  

if(p1 != null)              

//目的:釋放p1

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

,p1,&p1);  

system("pause"

);  

return

0;  

}  

野指標相關問題

最近在學習並行程式設計時注意到了uaf use after free 問題,引發uaf問題的原因一般是因為在釋放了某個指標指向的記憶體後,並沒有將該指標置空,從而可以通過該指標非法地修改記憶體。以前因為一直都沒有寫過大型專案,也不曾特別關心安全問題,雖然知道在指標申請後手動置為null但一度以為在f...

野指標和懸空指標

一 野指標 產生的原因 1 指標定義時未被初始化 指標在被定義的時候,如果程式不對其進行初始化的話,它會指向隨機區域,因為任何指標變數 除了static修飾的指標變數 在被定義的時候是不會被置空的,它的預設值是隨機的。2 指標被釋放時沒有被置空 我們在用malloc開闢記憶體空間時,要檢查返回值是否...

空指標和野指標

關於多次free 出現的野指標的原因 指標變數和指標變數所指的記憶體空間變數是兩個不同的概念 free 最主要釋放的指標變數所指的記憶體空間,因為記憶體資源是有限的,很寶貴,需要 利用 但是指標變數本身的值還是之前的指向,未重置成null 所以再次釋放的時候,指向了未知的記憶體區域,產生野指標 避免...