代码之家  ›  专栏  ›  技术社区  ›  gcamp

Mac OS上SQLite中的EXC_错误访问

  •  2
  • gcamp  · 技术社区  · 15 年前

    我正在从sqlite数据库中提取和推送数据。我使用fm数据库可可包装器。

    我从多个线程中拉入和推送数据,但我确保不会同时发生多个事务。

    我明白了 EXC_BAD_ACCESS 在数据库中调用几百次之后,但决不会同时调用。它也与内存无关(我尝试过NSZombies,并研究了参数的内存管理)。

    alt text http://grab.by/1VwY

    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 回复  |  直到 15 年前
        1
  •  2
  •   Anne Jerry Qassar    12 年前

    FMDatabase ,看来 sqlite_bind_text() 例程使用 SQLITE_STATIC 参数来绑定结果 NSString -UTF8String 方法(返回 autoreleased

    这意味着 SQLite 假定只要文本保持绑定状态,文本存储就会保持有效,而 返回仅对当前自动释放上下文有效。如果您使用的是相同的 FMResultSet 通过多个线程或函数调用,将该参数更改为 SQLITE_TRANSIENT 这样会安全得多。

    我建议在每一天都做这样的改变 sqlite3_bind_text() 打电话看看它是否还在崩溃。如果修复了它,您可能希望向开发人员报告它,作为一种可能的改进。