マックOS上のSQLiteでEXC_BAD_ACCESS
-
22-09-2019 - |
質問
私が引っ張ってSQLiteのデータベースからデータをプッシュしています。私はFMDatabaseココアラッパーを使用します。
私が引っ張り、押し、データを複数のスレッドから、私は確かにもっとそして1つのトランザクションが同時に起こることはないと判断しています。
私は、データベースで決して同時に数百回のコールの後EXC_BAD_ACCESS
を取得します。また、関連するメモリ(私はNSZombiesを試してみましたが、パラメータのメモリ管理で見てきた)ではありません。
ここでスタックとコードがあります:
FMResultSet* result = [db executeQuery:@"select latitude, longitude from cache where name = ?", name];
[result next];
NSString* latitude = [result stringForColumn:@"latitude"];
NSString* longitude = [result stringForColumn:@"longitude"];
私は考え、誰かが1つを持っているのでしょうか?
を得なかっました解決
FMDatabase
内の関連するコードを見ると、sqlite_bind_text()
ルーチンは(SQLITE_STATIC
ポインタを返す)結果NSString
の-UTF8String
メソッドをバインドするautoreleased
パラメータを使用していますようです。
この手段SQLite
は-UTF8String
リターンは現在の自動解放コンテキストでのみ有効である一方、テキストストレージは、長いテキスト遺骨がバインドされているように有効なままであることを前提としています。あなたが複数のスレッドまたは関数呼び出しの上に同じFMResultSet
を使用している場合は、SQLITE_TRANSIENT
にそのパラメータを変更すると、より安全になります。
私はすべてのsqlite3_bind_text()
呼び出しでその変更を作り、それがまだクラッシュした場合に見てお勧めしたいです。その修正した場合、それは、あなたが可能な改善として開発者に戻ってそれを報告したいことがあります。
所属していません StackOverflow