c++ - valgrind 报告 mysql_real_connect 泄漏

标签 c++ mysql memory-leaks valgrind

我有以下代码结构(整个代码很大,我认为这个片段与我的问题相关),

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 (在 mysql_query 等中)和 rowres_set< 的其他函数 必要时。正如所见,我释放了结果并在 main 末尾关闭了连接。

我将 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

从我的主函数中调用。

据此page调用 mysql_library_end() 是一个很好的做法。但即使我在关闭连接后调用 mysql_library_end() 。 Valgrind 说,

==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 指出存在问题。我哪里出错了?

最佳答案

可能什么也没有。你必须阅读本文。第一个答案非常明确。

TL;DR:Stillreachable并不是真正的“内存泄漏”,而是当程序即将终止时,程序中仍然存在指向它的指针(程序中的指针在程序终止前未释放)的内存。

Still Reachable Leak detected by Valgrind

关于c++ - valgrind 报告 mysql_real_connect 泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790033/

相关文章:

php - Joomla 安装期间无法连接到 mySQL 数据库

c - 如何跟踪泄漏了多少内存?

c++ - 分配动态数组 C++ 期间的段错误

c++ - 为什么在这个信号声明中有一个指向任何东西的指针?

C++//非静态数据成员的无效使用

c++ - 在 OSX 上,Valgrind 报告此内存泄漏,它来自哪里?

android - 带有 Builder 的自定义 Picasso 泄漏 NetworkBroadcastReceiver

C++:struct 和 new 关键字

php - 有没有办法让 PHP 将 sql 结果直接转换为 JSON?

mysql - 如何在 MySQL 中返回数据透视表输出?