0

C++ アプリケーション内で sqlite3_prepare_v2 を使用し、sqlite3_prepare_v2 を呼び出している関数の外部で sqlite3_stmt をインスタンス化すると、メモリ リークが発生します。

サンプル:

sqlite3_stmt* ps=NULL;
void prepare(void)
{
   if(ps == NULL)
       sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL);

}

準備を呼び出してアプリケーションを閉じると、メモリリークが発生します。

このようにする:

void prepare(void)
{
  sqlite3_stmt* ps=NULL;
  sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL);
}

メモリリークはありません。最新の合併でチェック。

私の目標は、挿入または更新のたびに DB を開いたり閉じたりすることです。全体を高速化するために、挿入および更新用のグローバル ステートメントを準備したいと思います。残念ながら、グローバルで一度作成されたステートメントがメモリリークを引き起こす場合、これは失敗します。

誰でも助けることができますか?ありがとうございました。

4

1 に答える 1

0

sqlite3_finalize() を呼び出していますか?

http://sqlite.org/c3ref/finalize.html

あなたの質問には、メモリリークがいつ発生するかは記載されていません-プログラムがいつ終了するかを推測しています。

于 2012-06-20T19:49:32.580 に答える