【问题标题】:Got an segment error and not sure what causes it出现段错误,不确定是什么原因造成的
【发布时间】:2022-06-22 21:23:27
【问题描述】:
#include <stdio.h>


int main () {
    int vIn_a, vIn_b, vIn_c;
    char vOperator;

    
    printf("Please enter a number\n");
    scanf("%d", vIn_a); 
    printf("Please enter a number\n");
    scanf("%d", vIn_b);
    printf("Please enter a Operator\n");
    scanf("%c", vOperator);

    switch(vOperator){
        case '+':
            vIn_c = (vIn_a + vIn_b); 
            break;
        case '-':
            vIn_c = (vIn_a - vIn_b);
            break;
        case '/':
            vIn_c = (vIn_a / vIn_b);
            break;
        case '*':
            vIn_c = (vIn_a * vIn_b);
            break;
    }
    printf("Result: %d %c %d = %d", vIn_a, vOperator, vIn_b, vIn_c);
    return 0;
}

只是想弄清楚这一点,我运行了 gdb。但不确定我的调试器此时告诉我什么。也许我忽略了它? 调试器:程序收到信号 SIGSEGV,分段错误。 0x00007ffff7c60d36 在?? () 来自 /usr/lib/libc.so.6

那么是什么导致了这个分段错误呢?我正在学习 C,但我迷路了。

提前致谢。

【问题讨论】:

  • 用调试符号编译代码。在gdb 中运行它。失败时,执行bt 命令。 bt 命令会显示效果。根本原因可能是直接的(堆栈中最顶层的调用者),也可能是导致直接影响的其他原因。
  • 您将错误类型的参数传递给scanf。它需要变量的地址,即&amp;vIn_a&amp;vIn_b&amp;vOperator。您还需要将scanf 调用中的"%c" 更改为" %c",以便它可以占用运算符字符之前的任何空格。
  • @JeffHolt 不,第一步是在编译器中启用警告。

标签: c linux


【解决方案1】:

您可以将 scanf 函数与 & 一起使用。例如; scanf("%d", &amp;vIn_a);

文档:https://cplusplus.com/reference/cstdio/scanf/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2018-08-20
    • 2011-01-19
    • 2015-01-07
    • 2013-06-16
    相关资源
    最近更新 更多