0

PROBLEM: 内存泄漏的原因是什么?

SITUATION:我使用 C++ 和 MySQL 使用 MySQL C API 构建了一个简单的命令行程序

问题是,该程序有许多来自对象的“轻微”内存泄漏malloc xx bytes",xx 范围从几个字节到 8 kb。所有泄漏链接到库libmysqlclient.18.dylib

我已经mysql_free_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;
}

执行查询:

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

1 回答 1

1

首先:为每个查询打开一个新连接(就像你在做的那样resetTable())是非常浪费的。您真正想要做的是在应用程序启动时打开单个连接,将其用于所有内容(可能通过将连接存储在全局中),并在完成后关闭它。

但是,要回答您的问题:完成后,您需要调用mysql_free_result()结果集。

于 2013-03-02T04:57:57.570 回答