2014-03-06 35 views
0

我有一個非常大的應用程序,使用MinGW編譯器編譯的20,000多行C編寫。應用程序在發佈模式下編譯時會發生內存泄漏,但在調試模式下不會泄漏。我創建了一個運行計數器,以確保我擁有與malloc()calloc()調用一樣多的free()調用。C應用程序調試與釋放模式下的內存泄漏

很顯然,我的代碼庫太大而無法在這裏發佈,所以我的問題是在調試和發佈之間進行編譯時會發生什麼樣的差異,這些差異可能導致內存泄漏問題,我可能想調查一下?

非常感謝!

+6

Wy不只是在合適的泄漏工具下運行它,比如valgrind?這應該會直接解決問題。 –

+1

我正在嘗試DrMemory – PumpkinPie

+0

您是否真的指「內存泄漏」 - 換句話說,當您繼續運行程序時,您可以看到堆增長,因爲當您處於「生產」模式時塊未被釋放?或者你的意思是「任何內存訪問錯誤」 - 在調試模式下運行時會消失的段錯誤?後者比形成的更容易解釋...你提到你會嘗試DrMemory。你有成功嗎? – Floris

回答

1

如果在編譯調試而不是編譯生產時使用不同的選項,程序的內存結構可能會稍有不同(特別是不同的優化設置會影響此功能)。這對於格式良好的代碼無關緊要,但是如果您正在讀取或寫入無效指針或超出數組末尾,那麼您覆蓋的變量可能會發生變化,從而導致無害的錯誤,反之亦然。

+0

+1 - 99,999%的所有調試/發佈錯誤都是UB,被不同的代碼/內存對齊等所掩蓋。 –