最近、私はlibmysqlclient
を利用したCプログラムに取り組み始めました。 valgrind
でコードをチェックすると、メモリリークが報告されました。 ...MySQL C APIのメモリリーク?
==25614== LEAK SUMMARY:
==25614== definitely lost: 0 bytes in 0 blocks
==25614== indirectly lost: 0 bytes in 0 blocks
==25614== possibly lost: 0 bytes in 0 blocks
==25614== still reachable: 288 bytes in 3 blocks
==25614== suppressed: 0 bytes in 0 blocks
をMySQLのAPIリファレンス、mysql_close()
による
が閉じる:私に語っ
#include <mysql.h> int main(void) { MYSQL* mysql = mysql_init(0); mysql_close(mysql); return 0; }
valgrind
を有する得られたプログラムを確認する次の最小限のコードスニペットは動作を再現します以前に開いた接続。 mysql_close()は、ハンドルがmysql_init()またはmysql_connect()によって自動的に割り当てられた場合、mysqlが指す接続ハンドルの割り当てを解除します。
ただし、valgrind
は解放されていないメモリを報告します。ここで何が間違っていますか?
おそらく一度初期化される内部バッファ? –
これは、ローカルタイムとフレンドを使用したバググラインドのリークを検出することに関連していると思います – Ulterior
マイケル:そうです、私の答えを見てください。 – Philip