我正在使用SQLCipher存储加密的SQLite数据库。但是,当我使用sqlite3_key
加密数据库时,我开始出现内存泄漏。观察以下示例:
#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
for的缓冲区长度"passphrase"
不是问题。
但是,无论我创建多少连接或使用多少不同的加密密钥,内存泄漏总是大约 8 KB。这让我怀疑这实际上不是内存泄漏,而只是 SQLite/SQLCipher 中的一些不变的全局内存,不会手动释放。
有谁之前经历过这个吗?有没有办法摆脱泄漏?即使这不是官方的内存泄漏,也很难用这个礼物检测到真正的内存泄漏。