我正在考虑计算使用scanf输入的3个变量的乘法结果,但在输入Duration变量时,它会给我一个分段错误。
function getFile(){
return $http.get('stat.json').then(function(data) {
return data.data;
});
}
答案 0 :(得分:1)
duration
的类型为int
,但您想要一个整数指针作为scanf
的参数,
scanf("%d", &duration);
scanf
通过将适当的字节放入内存中的位置来工作,因此作为scanf
完成后的副作用,提供的指针地址的内存中的值将是从输入中读取。由于您希望duration
本身包含此值,因此您希望将其读入duration
的内存位置,该位置在语法上表示为&duration
(" {的地址{1}}"。)
分段错误的原因是整数duration
未初始化,因此在程序启动时可能包含一些(未定义的)值。在尝试通过整数来获取内存地址方面,任何整数都与其他整数一样好,因此C运行时很乐意尝试处理duration
内的任何值,就像它是一个内存地址一样,但它是您的程序无权更改的内存地址。 (在许多情况下,它实际上是duration
,它等同于尝试将一些数据写入0
,但这并不是严格保证的,理论上甚至可能{{1}可以用一个指向有效内存位置的整数随机初始化...这可能会导致更糟糕的错误,将NULL
的结果写入该位置,而不用生成任何内容可见错误或分段错误。)