EXC_BAD_ACCESS 在函数调用后立即赋值给变量

EXC_BAD_ACCESS assigning to variable right after function call

我正在为基础课程编写一个非常简单的 C 程序,并且在第 14 行上一直得到 EXC_BAD_ACCESS。我看不出问题是什么。 该程序要求用户输入一个数字,然后显示与之关联的 ASCII 字符。

据我所知,这只会在使用 lldb 调试我的程序时发生。当从命令行 运行 或 onlinegdb.com 时,它工作得很好。 此外,如果我注释掉第 13 行,并将 truefalse 分配给 loop_ctrl,而不是 UserWantsToExit 的 return 值,一切都会按预期进行。


    #include <stdio.h>
    #include <stdbool.h>

    void GetAndDisplayInput(void);
    bool UserWantsToExit(void);

    int main()
    {
        bool loop_ctrl = true;

        while (loop_ctrl)
        {
            GetAndDisplayInput();
            loop_ctrl = !UserWantsToExit(); /* EXC_BAD_ACCESS */
        }

        return 0;
    }

    void GetAndDisplayInput()
    {
        char input_char = '0';

        printf("\nInput a number: ");
        scanf("%i", &input_char);
        getc(stdin); /* Gets rid of '\n' */

        printf("\n\nIt's character '%c'!\n\n", input_char);
    }

    bool UserWantsToExit()
    {
        char choice = '0';
        bool value = false;

        printf("\nDo you want to exit? (Y/N): ");
        scanf("%c", &choice);
        getc(stdin); /* Gets rid of '\n' */
        value = (choice == 'y' || choice == 'Y');

        return value;
    }

在函数 GetAdnDisplayInput() 中调用 scanf() 时使用的格式描述符 %i 需要指向 int 的指针类型的相应参数。您正在传递指向 char 的指针。未定义的行为是未定义的。

请注意,您的 C 编译器应该已就格式描述符与相应参数之间的不匹配发出警告;你应该养成在打开所有可能警告的情况下编译的习惯。