0

次のコードを使用して SQLite DB に挿入すると、ログに 2 つのクラッシュが表示されます。ほとんどの場合、コードは完全に機能しますが、クラッシュの原因となっている何かが明らかに間違っています。

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;
}

どこが間違っていますか?

4

1 に答える 1

0

sqlite3_close(smsデータベース); - これは if ステートメントの外側ではありませんか?つまり、一度も開かれていない可能性のあるデータベースを閉じているということですか?

于 2013-09-30T17:57:04.497 に答える