Мы очень часто видим этот отчет о сбоях в нашей базе данных, ориентированной на iOS.Сбой SQLite в sqlite3DbMallocRaw
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000001a
Triggered by Thread: 3
Thread 3 name:
Thread 3 Crashed:
0 libsqlite3.dylib 0x3a1fb150 sqlite3DbMallocRaw + 60 (sqlite3.c:19398)
1 libsqlite3.dylib 0x3a1cf950 yy_reduce + 19164 (sqlite3.c:19499)
2 libsqlite3.dylib 0x3a1cadbc sqlite3Parser + 252 (sqlite3.c:116602)
3 libsqlite3.dylib 0x3a1ca558 sqlite3RunParser + 260 (sqlite3.c:117427)
4 libsqlite3.dylib 0x3a1c9f18 sqlite3Prepare + 400 (sqlite3.c:99613)
5 libsqlite3.dylib 0x3a1c9c68 sqlite3LockAndPrepare + 140 (sqlite3.c:99705)
6 libsqlite3.dylib 0x3a204746 sqlite3_prepare_v2 + 26 (sqlite3.c:99784)
Это всегда сбой при подготовке. Наш код для подготовки ничего особенного.
- (DBStatement *)_prepareStatement:(NSString *)sql error:(NSError **)error
{
if (sql == nil) {
return nil;
}
const char *sqlCStr = [sql UTF8String];
sqlite3_stmt *stmt;
int result = sqlite3_prepare_v2(_db, sqlCStr, -1, &stmt, NULL);
if (result == SQLITE_OK) {
// create statement object
}
// ...
return statement;
}
Кто-нибудь видел это раньше? Что вызывает этот крах? Мы проверяем, является ли строка SQL нулевой, прежде чем пытаться выполнить подготовку, поэтому я не думаю, что это различие в NULL-указателе в нашем коде.
Такая же ошибка для меня. Я выяснил, что это происходит, когда происходит много подготовительных мероприятий, но до сих пор не решена моя проблема. –