-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];
}

然后随机化一个介于 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 回答