0

配列にEXC_BAD_ACCESS値を代入するとクラッシュしますid __strong *

これがコードです

    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

何か案は?

4

1 に答える 1

2

Im 100%確実ではありませんが、callocを使用するべきではありませんか?

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

ゼロで初期化されていないので、おそらくそれが問題です。解放する前に、変数をゼロにする必要があります。

于 2012-12-05T17:29:51.507 に答える