我有一个服务器应用程序,它存储了某个池中的所有连接。在丢失它与另一个应用程序的连接后,我的应用程序会破坏网络连接对象所需的所有对象。因此,所有对象都被成功销毁,并且数据库连接池也被破坏,但内存未被释放。
池中的连接存储如下:
std::unordered_map<int, DbConnection> connections;
破坏sqlite数据库连接就像:
if (sqlite3_close(sqliteDB) != SQLITE_OK)
{
printf(errormsg);
}
问题是sqlite3_close在这种情况下总是返回SQLITE_OK。所以它应该释放内存,但它不会这样做。每次重新连接后,我的应用程序消耗的内存量几乎增加了两倍!它肯定是sqlite的内存未发布,而不是其他东西。但是当我使用massif(valgrind工具)运行我的应用程序时,一切正常,并且根本没有内存泄漏。所以我无法理解如何解决这个问题。我正在使用fedora 19,但它可能会在每个Linux分发版上触发此错误。
有人知道问题是什么吗?