【问题标题】:SQlite3 Database Using ExceptionSQlite3 数据库使用异常
【发布时间】:2011-07-15 15:03:20
【问题描述】:

我正在使用包装器 SQLITE3 来访问 sqlite3 数据库,一切都很好,我关闭了我已经打开的所有数据库,但是当我的应用程序完成执行并在 main 中执行时(返回 0;)编程出现以下异常:

在 0x75d9b727 处未处理的异常 SQLCONVERTOR.exe:微软 C++ 异常:CppSQLite3 异常在 内存位置 0x0026f8d0..

如下代码:

void __cdecl exit (
        int code
        )
{
        doexit(code, 0, 0); /* full term, kill process */
}

我是一名 C++ 程序员,我花了大约一个月的时间解决这个问题,但什么也没解决。

如果有人知道我必须做什么?我要怎么想?感谢他/这里的帮助。

【问题讨论】:

  • 你应该尝试一点一点地减少代码,直到错误不再发生。或者相反,从一个简单的程序开始,然后添加代码,直到发生错误。这样您就可以将代码的问题部分归零。

标签: c++ sql sqlite


【解决方案1】:

sqlite3 在 C 中,因此不会抛出异常。

您实际上得到的是访问冲突,Microsoft 正在将其转变为异常。

问题是我们看不到您的任何代码。

【讨论】:

    【解决方案2】:

    问题是我混合使用来自 C 接口的一些 API 和来自 CPPSqlite3 Wrapper 的一些函数,基本上,使用 sqlite3_close API 与包装器中的关闭函数不同,包装器将 DB 指针设置为空,而sqlite3_close 不这样做,因此您必须手动执行此操作。

    换句话说: sqlite3_close(C) 的 C 参数必须是 NULL 指针或从 sqlite3_open()sqlite3_open16()sqlite3_open_v2() 获得的 sqlite3 对象指针,并且之前未关闭。使用 NULL 指针参数调用 sqlite3_close() 是无害的无操作。

    我的错误是:

    while( (pStmt = sqlite3_next_stmt(NewDB.mpDB, 0))!=0 )
    {
        sqlite3_finalize(pStmt);
    }
    sqlite3_close (NewDB.mpDB);
    

    应该是这样的:

    while( (pStmt = sqlite3_next_stmt(NewDB.mpDB, 0))!=0 )
    {
        sqlite3_finalize(pStmt);
    }
    NewDB.close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2015-09-02
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多