【问题标题】:sqlite3_prepare_v2 depends on scopesqlite3_prepare_v2 取决于范围
【发布时间】:2012-06-21 03:49:32
【问题描述】:

我在 c++ 应用程序中使用 sqlite3_prepare_v2 并在实例化一个 调用 sqlite3_prepare_v2 的 sqlite3_stmt 外部函数。

样本:

sqlite3_stmt* ps=NULL;
void prepare(void)
{
   if(ps == NULL)
       sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL);

}

调用准备,关闭应用程序,你会得到内存泄漏。

这样做:

void prepare(void)
{
  sqlite3_stmt* ps=NULL;
  sqlite3_prepare_v2(&db,"insert into nomatterbd...",-1,&ps,NULL);
}

没有内存泄漏。 用最新的合并检查。

我的目标是在每次插入或更新时打开和关闭数据库。为了加快整个 事情,我想为插入和更新准备全局语句。 不幸的是,如果全局和一旦创建的语句导致内存泄漏,这将失败。

谁能帮忙?谢谢。

【问题讨论】:

  • 如果您能提供一个完整程序来演示您的问题,那将会有所帮助。请保持简短(20 行或更少是完美的)。请将其直接复制粘贴到问题中,以便我们编译它并查看是否得到相同的结果。请参阅:sscce.org

标签: c++ sqlite


【解决方案1】:

你在调用 sqlite3_finalize() 吗?

http://sqlite.org/c3ref/finalize.html

您的问题没有说明内存泄漏何时发生-我猜程序何时退出。

【讨论】:

  • 是的,finalized 被调用。在这两种情况下。忘记添加代码示例。
  • 好吧,当您的代码示例缺少重要部分时,很难猜出您的内存泄漏是什么!
  • 我很抱歉代码滞后。我做了一个发布,关闭时(VS2008)在调试转储中显示了泄漏。第一个代码示例确实泄漏。 2号没有。第一个示例使用全局语句,第二个不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多