Phi*_*lip 3 c mysql api valgrind memory-leaks
最近,我开始研究一个使用它的C程序libmysqlclient.在检查我的代码时valgrind,它报告了内存泄漏.以下最小代码段重现了该行为:
#include <mysql.h>
int main(void)
{
MYSQL* mysql = mysql_init(0);
mysql_close(mysql);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
检查生成的程序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
Run Code Online (Sandbox Code Playgroud)
根据MySQL API参考,mysql_close()...
关闭先前打开的连接.如果句柄是由mysql_init()或mysql_connect()自动分配的,mysql_close()还会释放mysql指向的连接句柄.
但是,valgrind报告没有释放内存.这有什么不对?
通过文档挖掘,我发现了mysql_library_end()解决问题的功能.
引用MySQL API参考:
该函数最终确定了MySQL库.完成使用库后应该调用它(例如,在断开与服务器的连接后).
在个人方面,我发现它很烦人,libmysqlclient迫使其用户调用自己的清理功能.IMO,一个更好的解决方案是mysql_library_end()在连接数降至零时自动调用.
| 归档时间: |
|
| 查看次数: |
2119 次 |
| 最近记录: |