2010-11-29 60 views
2

Visual C++、MFCでSQLiteを使用しています。私はsqlite3_prepareによって準備されたすべてのステートメントをsqlite3_finalizeします。 アプリケーションを閉じるときにDB接続を閉じます。SQLiteを使用すると大きなメモリリークが発生する

どこに問題がありますか? ありがとう

+0

実際にメモリリークが発生していますか?メモリがsqlite3_shutdown()で返されていないことを確認しましたか? –

答えて

1

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は、ソースコードベースのメモリデバッグ機能を提供します。

1

上記の答えに基づいて、私はsqliteドキュメントから、sqlite3_execによって実行されたステートメントでsqliteによって返されたエラーがあれば、sqliteよりもエラーメッセージに必要なメモリを割り当て、そのメモリを解放することがアプリケーションの責任であると判断しました。

関連する問題