objective-c - 带有控制台应用程序的 EXC_BAD_ACCESS

标签 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 错误。

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

编辑

正如 Bryan 所指出的,我误用了指针和指针解引用。不幸的是,在清理我的代码后,它仍然给出同样的错误。

最佳答案

请先了解什么是指针。

您的问题是试图解除对无效指针的引用。

-(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);
        }

    }
}

关于objective-c - 带有控制台应用程序的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961839/

相关文章:

iphone - 如何在 iphone 中点击特定注释 pin 获取索引

objective-c - Android Studio 中现有 Flutter 项目中 Swift 或 Objective-C 的原生语言设置在哪里?

Objective-c 使用 CharacterAtIndex

c - 在 libusb_fill_interrupt_transfer 回调中使用 "user_data"时出错

c - 在C中将节点添加到链表时出现EXC_BAD ACCESS

objective-c - 识别 UIWebView 文件类型

c - (C) 宏中包含 2 个参数的宏无法编译,但在功能上运行良好。我想知道为什么。谢谢

c - 在C中初始化char数组

objective-c - 使用 initWithObjects : causes crash, 但 initWithCapacity: 后跟 addObject: 不会

c - 错误将字符串中的字符转换为大写