2010-11-29 74 views
2

我在Visual C++,MFC中使用SQLite。我sqlite3_finalize由sqlite3_prepare准备的每个语句。 当关闭应用程序时,我关闭数据库连接。使用SQLite时出现大内存泄漏

哪里可能有问题? 谢谢

+0

你确定它确实是内存泄漏吗?你检查内存是不是sqlite3_shutdown()返回? – 2010-11-29 13:37:10

回答

1

sqlite3会偶尔分配应该由用户释放的字符串,例如来自sqlite3_exec()调用的错误消息。搜索本页面

http://www.sqlite.org/capi3ref.html

sqlite3_free字符串,你会发现了很多类似案例。你确定你在代码中正确处理这些情况吗?

从我的经验sqlite3的一般不泄漏在它自己的内存,虽然内存的使用也增加非常慢慢地赶上了某一点,因为它缓存了一些信息和它的内部内存分配器保留一些内存块。你是如何检测内存泄漏的,你是如何确定sqlite3的原因的?

你使用过MSVC内存泄漏调试工具吗? Visual Studio提供了一个基于源代码的内存调试工具:

http://msdn.microsoft.com/en-us/library/x98tx3cf%28v=VS.100%29.aspx

它应该帮助您找出任何内存泄漏的原因。

1

基于上面的答案,我确实从sqlite文档中发现,如果sqlite在通过sqlite3_exec执行的任何语句中返回任何错误,那么sqlite会分配错误消息所需的内存,并且释放该内存是应用程序的责任。