-2

次のコードは壊れており、 '(lldb)' を返します:

NSMutableArray *numbersArray;

numbersArray = [[NSMutableArray alloc] init];

for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}
int r = rand()%34;

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
}

なぜでしょうか?

4

1 に答える 1

6

配列を初期化しておらず (1 行目)、未使用のメモリを指しています。そのはず

NSMutableArray *numbersArray = [[NSMutableArray alloc] init];

あなたがしていることは、nilどちらが安全かを指し示すこととは異なります。もしあなたがやっていたら

NSMutableArray *numbersArray = nil;

配列は常に空であることがわかります。なぜなら、配列は何も起こらないようにメッセージを送信していたからですnil(たとえば、オブジェクトを追加してもまったく何も起こりnilません)。


更新(編集後):

あなたのコードは正常に動作します。あなたはおそらくそれが何をしているのか理解していません。

最初の数行で、34 個の値を持つ配列が作成されます。-1

NSMutableArray *numbersArray = [[NSMutableArray alloc] init];
for (int i = 0; i<34; i++) {
    numbersArray[i] = [NSNumber numberWithInt:-1];
}

次に、1 つの整数値を 0 から 33 の間でランダム化します

int r = rand()%34;

そして、すべての-1の配列にその数値が含まれている間、新しい数値をランダム化します。

最初の数値は正で、配列はすべて -1 で満たされているため、ループの本体に入ることはなく、コードはそれをステップオーバーします。

while ([numbersArray containsObject:[NSNumber numberWithInt:r]]) { //it breaks here
     r = rand()%34;
} 

あなたが何をしようとしているのか本当に理解できませんが、これがあなたのコードが現在行っていることです。(動作しますが、まったく無意味です)

于 2013-04-22T17:28:11.527 に答える