Visual C++、MFCでSQLiteを使用しています。私はsqlite3_prepareによって準備されたすべてのステートメントをsqlite3_finalizeします。 アプリケーションを閉じるときにDB接続を閉じます。SQLiteを使用すると大きなメモリリークが発生する
どこに問題がありますか? ありがとう
Visual C++、MFCでSQLiteを使用しています。私はsqlite3_prepareによって準備されたすべてのステートメントをsqlite3_finalizeします。 アプリケーションを閉じるときにDB接続を閉じます。SQLiteを使用すると大きなメモリリークが発生する
どこに問題がありますか? ありがとう
sqlite3は、sqlite3_exec()呼び出しのエラーメッセージなど、ユーザーが解放する必要がある文字列を時折割り当てます。 sqlite3_free
文字列については、このページに
http://www.sqlite.org/capi3ref.html
を検索し、次のようないくつかの例を見つけるでしょう。コード内でこれらのケースを正しく処理していることは確かですか?それはいくつかの情報をキャッシュし、その内部のメモリアロケータは、いくつかのメモリブロックを確保して、メモリの使用は、ある時点まで徐々に増加非常にを行いますが、私の経験のsqlite3のから
は、一般的に、自分自身でメモリリークが発生しません。どのようにしてメモリリークを検出したのですか?原因としてsqlite3をどのように判断しましたか?
MSVCメモリリークデバッグ機能を使用しましたか?それはあなたが任意のメモリリークの原因を特定に役立つはず
http://msdn.microsoft.com/en-us/library/x98tx3cf%28v=VS.100%29.aspx
:Visual Studioは、ソースコードベースのメモリデバッグ機能を提供します。
上記の答えに基づいて、私はsqliteドキュメントから、sqlite3_execによって実行されたステートメントでsqliteによって返されたエラーがあれば、sqliteよりもエラーメッセージに必要なメモリを割り当て、そのメモリを解放することがアプリケーションの責任であると判断しました。
実際にメモリリークが発生していますか?メモリがsqlite3_shutdown()で返されていないことを確認しましたか? –