2011-03-15 35 views
0

我正在使用包装SQLITE3来访问sqlite3数据库,每一件事情都很好,我关闭了我已经打开的所有数据库,但是当我的应用程序完成执行并执行时(返回0; )在主程序以下异常上升:在 SQLCONVERTOR.exe在0x75d9b727SQlite3数据库使用异常

未处理的异常:微软C++ 不同之处: 存储器位置0x0026f8d0 CppSQLite3异常..

在下面的代码:

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

我是一名C++程序员,我花了一个月左右的时间解决了这个问题,但没有任何结果。

如果任何人有任何想法我必须做什么?我怎么想?我很欣赏他/这里的帮助。

+0

你应该尝试一点地减少代码一点,直到错误不会再发生。或者相反,从一个简单的程序开始,添加代码直到发生错误。通过这种方式,您可能能够在代码的有问题的部分进行调整。 – 2011-03-15 09:22:45

回答

0

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

实际得到的是访问冲突,微软正在变成一个例外。

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

+0

非常感谢CashCow – 2011-03-15 13:12:00

0

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

换句话说: 的C参数sqlite3_close(C)必须是空指针或)从sqlite3_open(获得的sqlite3的对象的指针,sqlite3_open16(),或sqlite3_open_v2()和先前未关闭。用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();