我在我的日志中出现了两个崩溃,使用以下代码插入到我的SQLite数据库中 - 代码在大多数情况下完美运行但是显然有一些错误导致崩溃。
它在sqlite3_last_insert_rowid或sqlite3_close上崩溃了EXC_BAD_ACCESS(我持有一个对SMSDatabase的引用,并且它是单一的,不知道为什么它会被解除分配)和SIGABRT(内存问题?)
- (NSInteger)query:(NSString *)query {
NSInteger lastRowID = 0;
if (sqlite3_open([self.databasePath UTF8String], &smsDatabase) == SQLITE_OK)
{
sqlite3_stmt *statement = nil;
const char *sql = [query UTF8String];
if (sqlite3_prepare_v2(smsDatabase, sql, -1, &statement, NULL) == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_DONE)
{
lastRowID = sqlite3_last_insert_rowid(smsDatabase);
}
}
sqlite3_finalize(statement);
}
sqlite3_close(smsDatabase);
return lastRowID;
}
我哪里错了?
答案 0 :(得分:0)
sqlite3_close(smsDatabase); - 这不是你的if语句,这意味着你正在关闭一个可能从未打开的数据库吗?