我使用SQLCipher來存儲加密的SQLite數據庫。但是,當我使用sqlite3_key
加密數據庫時,我開始發生內存泄漏。遵守以下樣品:SQLite是否會使用SQLCipher擴展泄漏內存?
#include <sqlite3.h>
int main()
{
sqlite3 * connection;
sqlite3_open_v2(":memory:", &connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
sqlite3_key(connection, "passphrase", 10);
sqlite3_close(connection);
}
此示例產生了內存泄漏。如果我刪除對sqlite3_key
的呼叫,則內存泄漏消失。
我已經縮小了一些可能的元兇:
- 儘管樣本使用基於文件的數據庫時使用的內存數據庫(因此
":memory:"
),我看到了同樣的結果。 - 來自
sqlite3_*
調用的所有返回碼都是SQLITE_OK
,表示沒有任何錯誤。 - 緩衝區長度爲
10
爲"passphrase"
不是問題所在。
但是,無論我創建多少個連接或使用多少個不同的加密密鑰,內存泄漏總是大約8千字節。這讓我懷疑這實際上不是內存泄漏,而是SQLite/SQLCipher中的一些常量全局內存不能手動釋放。
有沒有人遇到過這個?有沒有辦法擺脫泄漏?即使這不是官方的內存泄漏,也很難用這個禮物來檢測真正的內存泄漏。我正在使用SQLCipher library for Windows。
你是如何檢測內存泄漏的? _CrtDumpMemoryLeaks()? – 2012-08-02 19:59:33
是的,在Boost單元測試框架內。 – 2012-08-02 20:02:13
在運行最新的repo代碼的Linux上,上述代碼沒有問題。 – netcoder 2012-08-02 20:16:30