我正在使用包装器SQLITE3来访问sqlite3数据库,每件事情都很好,我关闭了我已经打开的所有数据库,但是当我的应用程序完成执行时,执行时返回(返回0;)编程以下异常上升:
0x75d9b727处的未处理异常 SQLCONVERTOR.exe:Microsoft C ++ 异常:CppSQLite3异常 内存位置0x0026f8d0 ..
在以下代码中:
void __cdecl exit (
int code
)
{
doexit(code, 0, 0); /* full term, kill process */
}
我是一名c ++程序员,我花了大约一个月的时间来解决这个问题,但一无所获。
如果有人知道我必须做什么?我怎么想?我很感激他/这里的帮助。
答案 0 :(得分:0)
sqlite3在C中,因此不会抛出异常。
您实际获得的是访问冲突,Microsoft正在变成例外。
问题是我们无法看到您的任何代码。
答案 1 :(得分:0)
问题是我使用来自C接口的一些API和来自CPPSqlite3 Wrapper的一些函数混合使用,基本上,使用sqlite3_close API与包装器中的close函数不同,包装器将DB指针设置为null,而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();