2010-11-29 75 views
2

我在Visual C++,MFC中使用SQLite。我sqlite3_finalize由sqlite3_prepare準備的每個語句。 當關閉應用程序時,我關閉數據庫連接。使用SQLite時出現大內存泄漏

哪裏可能有問題? 謝謝

+0

你確定它確實是內存泄漏嗎?你檢查內存是不是sqlite3_shutdown()返回? – 2010-11-29 13:37:10

回答

1

sqlite3會偶爾分配應該由用戶釋放的字符串,例如來自sqlite3_exec()調用的錯誤消息。搜索本頁面

http://www.sqlite.org/capi3ref.html

sqlite3_free字符串,你會發現了很多類似案例。你確定你在代碼中正確處理這些情況嗎?

從我的經驗sqlite3的一般不泄漏在它自己的內存,雖然內存的使用也增加非常慢慢地趕上了某一點,因爲它緩存了一些信息和它的內部內存分配器保留一些內存塊。你是如何檢測內存泄漏的,你是如何確定sqlite3的原因的?

你使用過MSVC內存泄漏調試工具嗎? Visual Studio提供了一個基於源代碼的內存調試工具:

http://msdn.microsoft.com/en-us/library/x98tx3cf%28v=VS.100%29.aspx

它應該幫助您找出任何內存泄漏的原因。

1

基於上面的答案,我確實從sqlite文檔中發現,如果sqlite在通過sqlite3_exec執行的任何語句中返回任何錯誤,那麼sqlite會分配錯誤消息所需的內存,並且釋放該內存是應用程序的責任。