EXC_BAD_ACCESS与控制台应用程序

时间:2014-01-07 00:24:07

标签: objective-c c exc-bad-access

我正在尝试学习Objective C(和C一起),并编写一个交互式控制台应用程序。我的背景是Java,而Objective C中的许多差异对我来说仍然不直观。 我写了以下方法:

-(void)start {
    [self startMenu]; // calls a method that prints the menu options
    char selectedOption = '\0'; // instantiating selectedOption
    char w = 'w';
    char n = 'n';
    char b = 'b';
    bool validOption = NO;
    while(!validOption) {
        scanf("%c", selectedOption);
        if(selectedOption == w) {
            [self setWinningScore];
        } else if(selectedOption == n) {
            [self setName];
        } else if(selectedOption == b) {
            break;
        } else {
            printf("'%s' is not a valid option.\n", selectedOption);
        }

    }
}

但无论何时运行,当它到达scanf("%c", *selectedOption);行时都会出现EXC_BAD_ACCESS错误。

我用Google搜索了这个错误。我找到了Lou Franco的 this article ,但我仍然不知道我能做些什么。

修改

正如布莱恩指出的那样,我误用指针和指针解除引用。不幸的是,在清理我的代码之后,它仍然会出现同样的错误。

1 个答案:

答案 0 :(得分:4)

请先了解指针是什么。

你的问题是试图取消引用无效指针。

-(void)start {
    [self startMenu]; // calls a method that prints the menu options
    char selectedOption = '\0';
    char w = 'w';
    char n = 'n';
    char b = 'b';
    bool validOption = NO;
    while(!validOption) {
        scanf("%c", &selectedOption);
        if(selectedOption == w) {
            [self setWinningScore];
        } else if(selectedOption == n) {
            [self setName];
        } else if(selectedOption == b) {
            break;
        } else {
            printf("'%c' is not a valid option.\n", selectedOption);
        }

    }
}