2009-10-22 79 views

回答

4

段錯誤:

  • 使用懸掛指針:釋放後不進行重置指針
  • 沒有檢查使用前指針
  • 未初始化變量/成員

內存/資源泄漏:

  • 忘記釋放資源(可用內存,關閉文件,...)
  • 與垃圾收集器環境:創建引用對象
  • 的環

如何檢測/避免:

  • 懸空指針:編碼規則,嚴格復位指針解除分配
  • 使用後靜態代碼檢查器用於避免大多數段錯誤
  • 使用動態代碼分析器來驗證資源泄漏消失
2

內存泄漏:通常這指的是像C這樣的語言,您可以手動管理內存。在這種情況下,您將在分配內存時不會在完成使用時釋放內存。在應用程序正在運行時,分配會一直堆積起來,並且內存無法釋放,直到進程完成執行。 Memory Leaks (Wikipedia)

分段錯誤:這種類型的錯誤的最常見的原因是試圖訪問內存,要麼不存在,或者是你正在運行的程序所允許的內存以外的部分(例如,如果你試圖訪問OS加載的內存)。這通常意味着你試圖用一個錯誤的指針,因此,例如:

int* ptr; 
... 
... 
... 
*ptr = 5; 

會導致段錯誤,因爲ptr爲空指針(或垃圾),你還沒有分配的內存的指針指向。 Segmentation Fault (Wikipedia)

1

很多,其中包括:

  • 分配的內存塊中,然後使用除了被分配更多,
  • 分配存儲器,而不是釋放它,
  • 正確未初始化數據指針,
  • 正確初始化功能指針,
  • 調用具有不正確的數字或​​參數值的函數,
  • 試圖通過NULL指針讀取或寫入,
  • 錯誤地鏈接到庫或錯誤的庫。

並非所有這些都適用於所有語言,但這些是開始思考的一些有用的事情。

0

在Addison Wesley看到Effective C++系列,對於手頭的問題非常有用。請注意,在指針使用中,必須單獨刪除所有元素,然後刪除指針 - 需要技巧並且通常不正確,導致隱藏的錯誤不容易顯示。 其他海報有答案,我只是增加一個額外的細節。