EXC_BAD_ACCESS错误,无可能的原因

时间:2010-07-02 03:00:57

标签: iphone objective-c memory-management exc-bad-access

好的,这是我的程序中的一个方法,它一直给出EXC_BAD_ACCESS错误并崩溃。我在下面说明了这一行。 questionsShown是一个readwrite属性,指向一个NSMutableArray,我在程序的早期点初始化容量为99。当我调试时,就所分配的属性而言,所有内容都显得正常。我认为内存管理一定存在问题,但我在查找问题时遇到了严重问题。提前感谢您的帮助。

@synthesize questionList;
@synthesize questionLabel;
@synthesize questionsShown;

-(IBAction)next{
int numElements = [questionList count];
int r;
if (myCount == numElements){
    [questionLabel setText:@"You have seen all the questions, click next again to continue anyways."];
    [questionsShown release];
    questionsShown = [[NSMutableArray alloc] initWithCapacity:99];
    myCount = 0;
}
else {
    do {
        r = rand() % numElements;
    } while ([questionsShown indexOfObjectIdenticalTo:r] != NSNotFound);
    NSString *myString = [questionList objectAtIndex:(NSUInteger)r];
    [questionLabel setText:myString];
    myCount++;
    [questionsShown addObject:r]; //results in crash with message EXC_BAD_ACCESS
    myCount++;
}
}

1 个答案:

答案 0 :(得分:10)

EXC_BAD_ACCESS来自解除引用r,它只是一个整数。你的编译器应该在那一行给你一个警告(从没有强制转换的整数做出指针)。

如果questionShown应该是某种类型的索引(它看起来像是),你可能想要使用该类,或者你必须在NSNumber对象中打包整数。所以:

[questionsShown addObject:[NSNumber numberWithInt:r]];

当你读到它时:

[questionsShown indexOfObjectIdenticalTo:[NSNumber numberWithInt:r]]

但我建议您查看NSIndexSet documentation

使用可变索引集,您可以执行以下操作:

[questionsShownIndexSet containsIndex:r]

[questionsShownIndexSet addIndex:r]