最近,我開始研究一個使用libmysqlclient
的C程序。當用valgrind
檢查我的代碼時,它報告了內存泄漏。以下最低的代碼片段重現行爲:MySQL C API內存泄漏?
#include <mysql.h>
int main(void)
{
MYSQL* mysql = mysql_init(0);
mysql_close(mysql);
return 0;
}
檢查與valgrind
生成的程序告訴我:
==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()
...
關閉次數一個以前打開的連接。如果句柄由mysql_init()或mysql_connect()自動分配,mysql_close()也會釋放由mysql指向的連接句柄。
但是,valgrind
報告未釋放的內存。這裏有什麼問題?
可能是初始化一次的內部緩衝區? – 2011-12-18 20:33:28
我認爲這與valgrind使用本地時間和朋友檢測泄漏有關 – Ulterior 2011-12-18 20:35:37
Michael:你說得對,看我的答案。 – Philip 2011-12-18 20:38:27