Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ libmysqlclient.18.dylib内存泄漏_C++_Mysql_Memory Leaks - Fatal编程技术网

C++ libmysqlclient.18.dylib内存泄漏

C++ libmysqlclient.18.dylib内存泄漏,c++,mysql,memory-leaks,C++,Mysql,Memory Leaks,问题:内存泄漏的原因是什么 情况: 我用C++和MySQL构建了一个简单的命令行程序,使用MySQL C API 问题是,程序有许多来自对象malloc xx bytes”的“轻微”内存泄漏,xx从几个字节到8 kb不等。所有泄漏链接到库libmysqlclient.18.dylib 我已经从代码中删除了所有的mysql\u free\u result(),看看这是否是问题所在,但还是一样 我的MySQL代码主要由以下简单代码组成: 要连接: MYSQL *databaseConnection(

问题
:内存泄漏的原因是什么

情况
: 我用C++和MySQL构建了一个简单的命令行程序,使用MySQL C API 问题是,程序有许多来自对象
malloc xx bytes”
的“轻微”内存泄漏,xx从几个字节到8 kb不等。所有泄漏链接到库
libmysqlclient.18.dylib

我已经从代码中删除了所有的
mysql\u free\u result()
,看看这是否是问题所在,但还是一样

我的MySQL代码主要由以下简单代码组成:

要连接:

MYSQL *databaseConnection()
{
    // declarations
    MYSQL *connection = mysql_init(NULL);

    // connecting to database
    if(!mysql_real_connect(connection,SERVER,USER,PASSWORD,DATABASE,0,NULL,0))
    {
        std::cout << "Connection error: " << mysql_error(connection) << std::endl;
    }
    return connection;
}

首先:为每个查询打开一个新连接(就像您在
resetable()
中所做的那样)是非常浪费的。您真正想做的是在应用程序启动时打开一个连接,对所有事情都使用它(可能通过将连接存储在全局中),然后在完成后关闭它


不过,为了回答您的问题,您需要在处理完结果集后调用它们。

上面的示例只是一个,正如我所说的示例。我不会为每个查询打开一个新连接:p无论如何,我已经尝试放置
mysql\u free\u result()
在每个结果集之后,但它仍然在泄漏。在另一个线程中,我读到了关于在关闭连接后使用
mysql\u library\u end()
的内容。仍然有相同数量的泄漏…该死,在为代码分解我的程序代码之后,我发现你实际上必须释放每个结果集。谢谢!
MYSQL_RES *getQuery(MYSQL *connection, std::string query)
{
    // send the query to the database
    if (mysql_query(connection, query.c_str()))
    {
        std::cout << "MySQL query error: " << mysql_error(connection);
        exit(1);
    }
    return mysql_store_result(connection);
}
void resetTable(std::string table)
{
    MYSQL *connection = databaseConnection();
    MYSQL_RES *result;

    std::string query = "truncate table " + table;
    result = getQuery(connection, query);

    mysql_close(connection);
}