在 C id __strong * 数组中分配值时偶尔EXC_BAD_ACCESS



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停止似乎不会发生崩溃,但没有输出抱怨任何僵尸。使用僵尸仪器时也会发生同样的情况 - 没有崩溃,没有僵尸输出。启用后卫马洛克似乎也可以阻止崩溃。

__strong更改为__autoreleasing似乎也可以阻止崩溃,但这真的是问题的解决方法吗,如果是这样,为什么?

有什么想法吗?

我不是 100% 确定,但你不应该使用 calloc 吗?

    entries = (id __strong *)calloc(sizeof(id), 20);

也许这就是问题所在,因为它没有初始化为零。在释放之前,您需要将变量清零。

相关内容

  • 没有找到相关文章