5

このクラッシュ レポートは、iOS を対象としたデータベース フレームワークで非常に頻繁に見られます。

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)

常に準備中にクラッシュします。prepare のコードは特別なものではありません。

- (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 文字列が nil かどうかをチェックしているので、コード内での NULL ポインター逆参照ではないと思います。

4

1 に答える 1

1

私も同じエラーがありました。

INSERT複数の/SELECTステートメントが次々と起動されたときに発生することに気付きました。

@synchronizedsqlite コードの周りにブロックを追加して修正しました。

@synchronized (self){
  // sqlite code
}
于 2013-05-29T13:29:01.667 に答える