內存泄漏和分段錯誤的一些常見原因是什麼?內存泄漏和分段故障的一些常見原因是什麼?
1
A
回答
4
段錯誤:
- 使用懸掛指針:釋放後不進行重置指針
- 沒有檢查使用前指針
- 未初始化變量/成員
內存/資源泄漏:
- 忘記釋放資源(可用內存,關閉文件,...)
- 與垃圾收集器環境:創建引用對象 的環
如何檢測/避免:
- 懸空指針:編碼規則,嚴格復位指針解除分配
- 使用後靜態代碼檢查器用於避免大多數段錯誤
- 使用動態代碼分析器來驗證資源泄漏消失
2
內存泄漏:通常這指的是像C這樣的語言,您可以手動管理內存。在這種情況下,您將在分配內存時不會在完成使用時釋放內存。在應用程序正在運行時,分配會一直堆積起來,並且內存無法釋放,直到進程完成執行。 Memory Leaks (Wikipedia)
分段錯誤:這種類型的錯誤的最常見的原因是試圖訪問內存,要麼不存在,或者是你正在運行的程序所允許的內存以外的部分(例如,如果你試圖訪問OS加載的內存)。這通常意味着你試圖用一個錯誤的指針,因此,例如:
int* ptr;
...
...
...
*ptr = 5;
會導致段錯誤,因爲ptr爲空指針(或垃圾),你還沒有分配的內存的指針指向。 Segmentation Fault (Wikipedia)
1
很多,其中包括:
- 分配的內存塊中,然後使用除了被分配更多,
- 分配存儲器,而不是釋放它,
- 正確未初始化數據指針,
- 正確初始化功能指針,
- 調用具有不正確的數字或參數值的函數,
- 試圖通過NULL指針讀取或寫入,
- 錯誤地鏈接到庫或錯誤的庫。
並非所有這些都適用於所有語言,但這些是開始思考的一些有用的事情。
0
在Addison Wesley看到Effective C++系列,對於手頭的問題非常有用。請注意,在指針使用中,必須單獨刪除所有元素,然後刪除指針 - 需要技巧並且通常不正確,導致隱藏的錯誤不容易顯示。 其他海報有答案,我只是增加一個額外的細節。
相關問題
- 1. 什麼是PHP內存泄漏的常見原因?
- 2. 內存泄漏的常見原因
- 3. 什麼是COM內存泄漏經常遇到的原因?
- 4. addSubview的內存泄漏故障排除
- 5. 這種潛在的內存泄漏的原因是什麼?
- 6. 是什麼原因造成我的內存泄漏的OpenCV
- 7. 什麼是故障 - 段故障,即...?
- 8. 什麼是死鎖的常見原因?
- 9. 爲什麼我有一個「分段故障」,在C,但在Python沒有內存泄漏?
- 10. 以下示例中導致內存泄漏的原因是什麼?
- 11. 什麼是使用JQuery/JavaScript導致內存泄漏的常見方法?
- 12. 爲什麼我遇到內存故障/在UWP/C#應用程序泄漏
- 13. 什麼是造成內存泄漏?
- 14. 分段MP4中的FFmpeg內存泄漏
- 15. 泄漏的內存,分段錯誤,C
- 16. 這條泄漏線背後的原因是什麼?
- 17. 內存泄漏的異常
- 18. 幫助找到一個內存泄漏原因
- 19. 如何使用泄漏消毒劑找到內存泄漏的原因
- 20. 什麼是一些常見的SocketExceptions以及導致它們的原因?
- 21. Websphere中存在內存泄漏的原因ValueHandlerPool(懷疑)
- 22. 分配屬性時泄漏內存工具無法檢測到泄漏,因此泄漏是否存在?
- 23. 分割故障原因程序集
- 24. 分割故障原因在Linux
- 25. Linux共享內存分段故障
- 26. 區分內存泄漏和正常內存使用情況
- 27. 是內存泄漏?爲什麼java.lang.ref.Finalizer吃了這麼多內存
- 28. 內存泄漏[String]常量
- 29. ExecutorService內存泄漏異常
- 30. 內存泄漏 - WCF異常
哪種編程語言? – ChrisW 2009-10-22 22:42:19