gpt4 book ai didi

cocoa - Mac OS 上 SQLite 中的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-12-03 16:39:39 25 4
gpt4 key购买 nike

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

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

在对数据库进行数百次调用后,我得到了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"];

我不知道,有人有吗?

最佳答案

查看FMDatabase中的相关代码,sqlite_bind_text()例程似乎使用SQLITE_STATIC参数来绑定(bind)结果 NSString-UTF8String 方法(返回一个 autoreleased 指针)。

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

我建议在每个 sqlite3_bind_text() 调用中进行更改,并查看它是否仍然崩溃。如果问题得到解决,您可能需要将其报告给开发人员,作为可能的改进。

关于cocoa - Mac OS 上 SQLite 中的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2125063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com