我在Visual C++,MFC中使用SQLite。我sqlite3_finalize由sqlite3_prepare準備的每個語句。 當關閉應用程序時,我關閉數據庫連接。使用SQLite時出現大內存泄漏
哪裏可能有問題? 謝謝
我在Visual C++,MFC中使用SQLite。我sqlite3_finalize由sqlite3_prepare準備的每個語句。 當關閉應用程序時,我關閉數據庫連接。使用SQLite時出現大內存泄漏
哪裏可能有問題? 謝謝
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
它應該幫助您找出任何內存泄漏的原因。
基於上面的答案,我確實從sqlite文檔中發現,如果sqlite在通過sqlite3_exec執行的任何語句中返回任何錯誤,那麼sqlite會分配錯誤消息所需的內存,並且釋放該內存是應用程序的責任。
你確定它確實是內存泄漏嗎?你檢查內存是不是sqlite3_shutdown()返回? – 2010-11-29 13:37:10