2

我已经尝试了日日夜夜的谷歌搜索和阅读 MySQL 文档,但我似乎无法找出可能导致内存泄漏的原因。

它似乎是随机发生的,这是唯一泄漏的功能。

代码:

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;
}

乐器裁剪

4

1 回答 1

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

于 2014-01-20T08:41:38.843 回答