私は次のコード構造を持っています (コード全体が巨大で、このスニペットは私の問題に関連していると思います)、
MYSQL_RES *res_set;
MYSQL_ROW row;
MYSQL *connect;
int main()
{
connect=mysql_init(NULL);
mysql_real_connect(connect, NULL, "root", "suvp" ,"Employees" ,0,NULL,0);
/*Other Code*/
mysql_free_result(res_set);
mysql_close(connect);
}
データベース接続の変数はグローバルです。私の「その他のコード」では、必要に応じて初期化connect
された (in mysql_query
etc で) and row
and andを使用する他の関数を呼び出しますres_set
。ご覧のとおり、結果を解放し、メインの最後で接続を閉じます。
res_set
ある関数から別の関数に (毎回解放せずに) 再利用します。それは問題を引き起こしますか?
私が使用するすべての機能で、ステートメントは似ています
mysql_query(connect,myQuery.c_str())
res_set = mysql_store_result(connect);
row = mysql_fetch_row(res_set);
Valgrind はこれを報告しています。
==4864== LEAK SUMMARY:
==4864== definitely lost: 0 bytes in 0 blocks
==4864== indirectly lost: 0 bytes in 0 blocks
==4864== possibly lost: 0 bytes in 0 blocks
==4864== still reachable: 99,954 bytes in 30 blocks
==4864== suppressed: 0 bytes in 0 blocks
詳細なエラーは、
mysql_real_connect
メイン関数から呼び出されます。
このページによると、呼び出しmysql_library_end()
は良い習慣です。しかしmysql_library_end()
、接続を閉じた後に電話をかけた後でも。ヴァルグリンド曰く、
==5120== HEAP SUMMARY:
==5120== in use at exit: 116,466 bytes in 34 blocks
==5120== total heap usage: 95 allocs, 61 frees, 147,218 bytes allocated
==5120== LEAK SUMMARY:
==5120== definitely lost: 0 bytes in 0 blocks
==5120== indirectly lost: 0 bytes in 0 blocks
==5120== possibly lost: 0 bytes in 0 blocks
==5120== still reachable: 116,466 bytes in 34 blocks
==5120== suppressed: 0 bytes in 0 blocks
前述のように、それらはすべて要約すると次のようになります。mysql_real_connect
プログラムは正常に実行されます。しかし、valgrind によって示される問題があります。どこが間違っていますか?