【发布时间】:2012-12-05 17:02:06
【问题描述】:
在id __strong * 数组中分配值时,EXC_BAD_ACCESS 崩溃
这是代码
id __strong *entries;
entries = (id __strong *)malloc(sizeof(id) * 20);
for (NSUInteger j = 0; j < 20; j++)
{
entries[j] = @{@"key1" : @"value1", // Crash
@"key2" : @"value2",
@"key3" : @"value3"]};
}
//...
free(entries);
值是什么并不重要。即使这样:
entries[j] = [NSNumber numberWithInt:1];
崩溃。
它不会每次都崩溃,但会在几次尝试后发生。在索引 0 处分配值时会发生崩溃,因此它不会在 for 循环的中途发生,并且切断 for 循环并不能解决崩溃问题。
启用NSZombies 停止会出现崩溃,但没有输出抱怨任何僵尸。使用 Zombies Instrument 时也会发生同样的情况 - 没有崩溃,没有僵尸输出。启用 Guard Malloc 似乎也可以阻止崩溃。
将__strong 更改为__autoreleasing 似乎也可以阻止崩溃,但这真的可以解决问题吗?如果是,为什么?
有什么想法吗?
【问题讨论】:
标签: objective-c malloc automatic-ref-counting exc-bad-access