free 和 delete 把指標怎麼了

2022-02-19 02:48:31 字數 715 閱讀 2096

使用free或delete之後,只是把指標所指的內容給釋放掉,但是指標並沒有被乾掉,還是指向原來位置(並不是執行null),此時指標指向的內容為垃圾,被稱為「野指標」。

舉例說明幾個重要容易迷糊的特徵:

1. 指標消亡了,並不表示他所指向的記憶體會被自動釋放。例:

void

func(coid)

當函式執行完時,指標變數因為存在於棧上,會自動消亡。但是這不意味著分配的空間也會自動釋放,原因是:動態非配的空間位於堆(動態記憶體分配區),必須自己去釋放;否則,呼叫一次函式,造成一次記憶體洩露。

2. 記憶體被釋放了,並不表示指標會自動消亡或變成null指標。例如

char *p = (char *)malloc(sizeof(char) * 100

);cout << &p << endl;

free p;

cout

<< &p << endl;

可以看出兩次輸出是一樣的,也就是說雖然內容被釋放掉了。但是指標還是指向原地。因此釋放掉指標後,應該立馬賦值為null。

杜絕「野指標」

for(int i=0; i<2; ++i)

cout

<< *p

<< i << endl;

C 基礎 指標 野指標和free

野指標的重複釋放問題 最近發現了這樣乙個問題,乙個指標釋放兩次之後,若在中間不置空,會報invalid address specified to rtlvalidateheap 無效的堆位址 錯誤。include include include using namespace std int mai...

刪除鍊錶的節點,關於delete和free

最近溫習鍊錶的知識,看到 c 入門經典 第九版,p528。這裡面講解了鍊錶的刪除節點。delete nodetodelete 用這樣一句話就刪除節點了,十分方便。不過,我還是有些疑問,這是不是太簡單了。然後就查詢了一下,果然有學習到了乙個知識點,我已經會的,忘記了,這次又學一遍,應該不會忘記了。關於...

野指標和free總結超有用

所指向的記憶體未申請 2.所指向的記憶體被釋放 當你訪問乙個未申請的記憶體區域時,系統會判定我們沒有許可權,無法訪問。記憶體被釋放後你再訪問,結果完全不可預知,很大機率會出現段錯誤 segmentation fault 這是提示你訪問越界了。野指標怎麼出現的?在 中以下幾種情況會出現野指標 1.指標...