EXC_BAD_ACCESS错误 - 有时只是

时间:2012-04-12 09:38:36

标签: iphone xcode exc-bad-access

我的应用程序有一个按钮,用于检查输入的值是否正确。 有时它会导致它崩溃,但奇怪的是它会以不规则的间隔发生(有时在第三次迭代,有时是第十次,有时从不)。

我在调试器中收到EXC_BAD_ACCESS错误。因此,似乎某些东西正在被释放,而它不应该被释放。按钮调用此功能:

- (IBAction)checkValue:(id)sender{
int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];
actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
    UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
            message:@"next value."
            delegate:nil
            cancelButtonTitle:@"ok" 
            otherButtonTitles: nil];
    [correctAlert show];
    [correctAlert release];
}
else
{
    UIAlertView *incorrectAlert = [[UIAlertView alloc]
    initWithTitle:@"does not match"
            message:@"next value."
        delegate:nil
            cancelButtonTitle:@"ok"
            otherButtonTitles: nil];
    [incorrectAlert show];
    [incorrectAlert release];
}

使用僵尸指向第一个声明:

int actualDifference = [firstNumberString intValue] - [secondNumberString intValue];

有谁知道问题可能是什么?

2 个答案:

答案 0 :(得分:0)

将其更改为

 NSInteger actualDifference = [firstNumberString intValue] - [secondNumberString intValue];  //change int to NSInteger
NSString *actualDifferenceAsString = [NSString stringWithFormat:@"%d", actualDifference];
if ([answerTextField.text isEqualToString:actualDifferenceAsString])
{
    UIAlertView *correctAlert = [[UIAlertView alloc] initWithTitle:@"matches"
                                                           message:@"next value."
                                                          delegate:nil
                                                 cancelButtonTitle:@"ok" 
                                                 otherButtonTitles: nil];
    [correctAlert show];
    [correctAlert release];
}
else
{
    UIAlertView *incorrectAlert = [[UIAlertView alloc]
                                   initWithTitle:@"does not match"
                                   message:@"next value."
                                   delegate:nil
                                   cancelButtonTitle:@"ok"
                                   otherButtonTitles: nil];
    [incorrectAlert show];
    [incorrectAlert release];
}

你得到这个代码。它对我有用......

答案 1 :(得分:0)

如果在第一行检测到僵尸,则表示程序的其他部分正在发布firstNumberStringsecondNumberString。这就是问题开始的地方,但只有在您稍后尝试访问这些值时才会显示。你还在哪里使用这些字符串?你有没有释放它们?

为了整体安全,可能应该为它们分配属性,而不是成员变量。