c 空指標和野指標

2021-10-23 00:15:40 字數 665 閱讀 1697

野指標不同於空指標,空指標是指乙個指標的值為null,而野指標的值並不為null,野指標會指向一段實際的記憶體,只是它指向**我們並不知情,或者是它所指向的記憶體空間已經被釋放,所以在實際使用的過程中,我們並不能通過指標判空去識別乙個指標是否為野指標。(野指標可能指向乙個可用的,但是正在被使用的空間,如果對它進行操作是非常危險的,程式可能會崩潰,資料也會可能被破壞),避免野指標只能靠我們自己養成良好的程式設計習慣。

1、在宣告指標的時候,就應該對其進行初始化,即讓他指向null值

int *p = null;
2、使用指標前進行判斷:

if (p == null)

else

3、釋放指標後將其指向null

如果堆上的記憶體已經被釋放,但是指向該記憶體的指標如果沒有人為的修改過,那麼指標還會繼續指向這段堆上已經被釋放的記憶體,這時還通過該指標去訪問堆上的記憶體,就會造成不可預知的結果

int *p = new int();

...delete p;

p = null;

4、動態申請操作必須和釋放操作匹配,防止記憶體洩露和多次釋放。誰申請,誰釋放。

5、牢記陣列的長度,防止陣列越界操作,考慮使用柔性陣列,使用結構體struct來定義柔性陣列。

c 空指標,野指標

當給空指標所指的位址賦值時,會報錯 int p nullptr p 10 int p 野指標,未初始化int p new int delete p 刪除後不知道p指向 include using namespace std class a void a func void void test voi...

空指標和野指標

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

野指標和空指標

1.是取位址符號,是公升維度的,取其右邊變數的位址,如 d取變數d的位址。是取值符號 間接訪問 是降維度的,表示右邊指標變數所指向的變數,如 p表示指標變數p所指向的變數 2.float p d 則 p是變數d,而 p是變數p 即變數d 的位址p,p等價於p.3.在定義指標型別一定要和變數的型別對應...