Google의 iOS 대상 데이터베이스 프레임 워크에서이 충돌 보고서를 매우 자주 볼 수 있습니다.sqlite3DbMallocRaw에서 SQLite 충돌이 발생했습니다.
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 문자열이 nil인지 검사하고 있으므로 코드에서 역 참조가 아닌 NULL 포인터라고 생각하지 않습니다.
같은 오류가 발생했습니다. 나는 많은 준비가있을 때 일어난다는 것을 알았지 만 여전히 나의 문제를 해결하지는 못했다. –