我已经日夜搜索谷歌和阅读MySQL文档,但我似乎无法找出可能导致内存泄漏的原因。
它似乎随机发生,这是泄漏的唯一功能。
CODE:
unsigned long numRowQuery(std::string query)
{
MYSQL *connection = mysql_init(NULL);
MYSQL_RES *result;
unsigned long num_rows;
// connecting to database
if(!mysql_real_connect(connection,SERVER,USER,PASSWORD,DATABASE,0,NULL,0))
{
std::cout << "Connection error: " << mysql_error(connection) << std::endl;
}
if (mysql_query(connection, query.c_str()))
{
std::cout << "MySQL query error: " << mysql_error(connection) << std::endl;
exit(1);
}
result = mysql_store_result(connection);
num_rows = mysql_num_rows(result);
mysql_free_result(result);
mysql_close(connection);
mysql_library_end();
return num_rows;
}
答案 0 :(得分:0)
如果启用多语句支持,则应通过使用调用mysql_next_result()的循环来检索对mysql_query()或mysql_real_query()的调用的结果,以确定是否有更多结果。
软件中的某些查询可能会产生更多结果,因此,您需要在发出查询后获取所有查询。尝试将mysql_free_result函数调用放在循环中,如下面的代码:
while (mysql_next_result(connection) == 0)
{
result = mysql_store_result(connection);
if (result)
mysql_free_result(result);
}
这里是文档:mysql_store_result