使用free或delete之後,隻是把指針所指的内容給釋放掉,但是指針并沒有被幹掉,還是指向原來位置(并不是執行NULL),此時指針指向的内容為垃圾,被稱為“野指針”。
舉例說明幾個重要容易迷糊的特征:
1. 指針消亡了,并不表示他所指向的記憶體會被自動釋放。例:
當函數執行完時,指針變量因為存在于棧上,會自動消亡。但是這不意味着配置設定的空間也會自動釋放,原因是:動态非配的空間位于堆(動态記憶體配置設定區),必須自己去釋放;否則,調用一次函數,造成一次記憶體洩露。
2. 記憶體被釋放了,并不表示指針會自動消亡或變成NULL指針。例如
可以看出兩次輸出是一樣的,也就是說雖然内容被釋放掉了。但是指針還是指向原地。是以釋放掉指針後,應該立馬指派為NULL。
杜絕“野指針”
指針變量要初始化。要麼為NULL,要麼為合法的記憶體
指針被釋放掉時,将指針置位NULL
防止指針超越了變量的作用範圍。例:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmLlR2bjlHcvN2LcNXZnFWbp9CXt92YuM3ZvxmYuNmLu9Wbt92Yvw1LcpDc0RHaiojIsJye.gif)
本文轉自jihite部落格園部落格,原文連結:http://www.cnblogs.com/kaituorensheng/p/3247687.html,如需轉載請自行聯系原作者