使用scanf输入整数时,为什么会出现分段错误?

时间:2018-02-22 15:44:58

标签: c

我正在考虑计算使用scanf输入的3个变量的乘法结果,但在输入Duration变量时,它会给我一个分段错误。

function getFile(){
       return $http.get('stat.json').then(function(data) {
            return data.data;
        }); 
    } 

1 个答案:

答案 0 :(得分:1)

duration的类型为int,但您想要一个整数指针作为scanf的参数,

scanf("%d", &duration);

scanf通过将适当的字节放入内存中的位置来工作,因此作为scanf完成后的副作用,提供的指针地址的内存中的值将是从输入中读取。由于您希望duration本身包含此值,因此您希望将其读入duration的内存位置,该位置在语法上表示为&duration(" {的地址{1}}"。)

分段错误的原因是整数duration未初始化,因此在程序启动时可能包含一些(未定义的)值。在尝试通过整数来获取内存地址方面,任何整数都与其他整数一样好,因此C运行时很乐意尝试处理duration内的任何值,就像它是一个内存地址一样,但它是您的程序无权更改的内存地址。 (在许多情况下,它实际上是duration,它等同于尝试将一些数据写入0,但这并不是严格保证的,理论上甚至可能{{1}可以用一个指向有效内存位置的整数随机初始化...这可能会导致更糟糕的错误,将NULL的结果写入该位置,而不用生成任何内容可见错误或分段错误。)