首页 / MYSQL / MySQL C API内存泄漏?
MySQL C API内存泄漏?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL C API内存泄漏?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1166字,纯文字阅读大概需要2分钟。
内容图文
![MySQL C API内存泄漏?](/upload/InfoBanner/zyjiaocheng/894/f556aee5b33147219e061551ee3172f0.jpg)
最近,我开始研究一个使用libmysqlclient的C程序.使用valgrind检查我的代码时,它报告了内存泄漏.以下最小代码段重现了该行为:
#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 Reference,mysql_close()……
Closes a previously opened connection. mysql_close() also deallocates the connection handle pointed to by mysql if the handle was allocated automatically by mysql_init() or mysql_connect().
但是,valgrind报告未释放的内存.这有什么不对?
解决方法:
通过文档挖掘,我找到了解决问题的函数mysql_library_end().
引用MySQL API参考:
This function finalizes the MySQL library. You should call it when you are done using the library (for example, after disconnecting from the server).
在个人方面,我发现libmysqlclient强迫其用户调用自己的清理函数是相当恼人的. IMO,一个更好的解决方案是在连接数降至零时自动调用mysql_library_end().
内容总结
以上是互联网集市为您收集整理的MySQL C API内存泄漏?全部内容,希望文章能够帮你解决MySQL C API内存泄漏?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。