我有一個包含3個節點指針和2個整數的節點類。我用new
分配了所有的節點,但是當我調用delete
時,整數被設置爲-17891602
,並且它將我代碼的其餘邊界檢查搞砸了。什麼會導致delete
這樣做?什麼會導致刪除在我的課的數據字段中留下垃圾值?
回答
經過delete
後,內存不再是你的了。不要檢查它,不要對它做任何事情,因爲如果你這樣做,那麼你有未定義的行爲。它很可能很快就會被重用。
乾杯&心連心,
只需添加,在調試版本中,許多編譯器會故意將垃圾寫入釋放的內存,以便更容易地捕獲您訪問您不應該擁有的內容。 –
在我看來,yemathums在說刪除節點的指針成員會更改整數成員。他沒有檢查刪除的內存(據他所知)。 –
檢查指針是否領域也獲得新的價值。它們是否等於0xfeeefeee? (十六進制爲-17891602。)你的內存管理器可能會覆蓋已釋放的內存,所以當你試圖讀取或寫入你不應該訪問的內存時,在崩潰轉儲中更容易識別。
如果您正在閱讀已釋放的對象以進行邊界檢查,那麼您將依賴未定義的行爲。檢查你的環境的文檔,找出它在釋放內存方面做了什麼,如果有的話。你的界限檢查器將需要與它合作;你不能認爲它會在一般情況下工作。
如果您在Linux上開發並使用gdb
,則可以使用watch
命令將觀察點放到GDB。這可以幫助查找何時覆蓋了內存位置。
- 1. 從數據庫中刪除垃圾
- 2. 異常導致字符串(C#)中的垃圾數據
- 3. 什麼會導致彙編語言程序顯示「垃圾」?
- 4. 爲什麼調用AppDomain.Unload不會導致垃圾回收?
- 5. 爲什麼調用DetachCurrentThread()會導致垃圾收集過多?
- 6. 這會導致垃圾收集問題
- 7. cufftSetStream導致垃圾輸出。難道我做錯了什麼?
- 8. 這是什麼導致Unicode顯示爲垃圾字符?
- 9. 如何刪除文本中的垃圾字段
- 10. 什麼會導致SVN刪除文件?
- 11. 什麼會導致GenericObjectPool刪除對象?
- 12. memmove留下垃圾 - C
- 13. 從JSON中刪除垃圾?
- 14. 刪除表不會導致在sqlite文件中刪除數據
- 15. 爲什麼我有時會從BBC Weather RSS Feed下載垃圾數據?
- 16. 如何從字符串中刪除垃圾數據
- 17. 爲什麼在foldLeft中留下點會導致編譯錯誤?
- 18. 爲什麼我在文件中收到垃圾數據?
- 19. 垃圾收集的Javascript數組刪除
- 20. 爲什麼我只能在Ubuntu的G ++中獲得垃圾值?
- 21. 因垃圾對象引用而導致的java垃圾回收
- 22. 什麼會導致字段在PHP中返回數組?
- 23. C++字符數組 - 爲什麼垃圾?
- 24. 爲什麼我會爲C程序獲取垃圾值?
- 25. 爲什麼我的char []存儲垃圾?
- 26. 刪除根垃圾回收
- 27. C#Listview,刪除垃圾列
- 28. Phpbb垃圾郵件刪除
- 29. 爲什麼我的REST請求返回垃圾數據?
- 30. C#讀取一個字節[]並刪除垃圾數據
你能分享你的代碼嗎? – Avinash
沒有看到一些代碼,很難知道。也許你在析構函數中有一個錯誤? –
爲什麼在你調用'delete'之後檢查內存內容?你不應該這樣做.'delete'不能保證在內存位置寫任何特定的東西。很多刪除的實現都會有意編寫特定的垃圾來幫助檢測錯誤,比如在調用delete之後訪問內存。 –