【问题标题】:SegFault after scanf?scanf后的SegFault?
【发布时间】:2011-03-09 08:02:12
【问题描述】:
#include <stdio.h>
#define TimeConverter 60
#define TempFormula time * time * 4 / time + 2 - 20

double HoursMinToTime(int hour, int min);

double Temperature(double time);

int main()
{
    int hour, min;
    double time, temperature;
    printf("Hours and minutes: ");
    scanf("%d %d", hour, min);
    //Segfault HERE
    time = HoursMinToTime(hour, min);
    temperature = Temperature(time);
    printf("After a %lf hour power failure, the frezer will be %lf degrees", time, temperature);
    return 0;
}
double HoursMinToTime(int hour, int min)
{
    double time = hour * min / TimeConverter;
    return time;              
}
double Temperature(double time)
{
    double temp;
    temp = TempFormula;
    return temp;
}

为什么在scanf之后会出现分段错误?

【问题讨论】:

  • 总是使用编译器警告,使用 gcc 你使用-Wall!!
  • 我在 Windows 7 x64 上使用 DevCPP,而不是 Linux,虽然我可能应该

标签: c segmentation-fault scanf


【解决方案1】:

scanf 需要将变量的地址传递给它。用

替换你的 scanf
scanf("%d %d",&hour,&min);

你应该很高兴。

【讨论】:

  • wowww 我以不同的方式两次犯了同样的错误,请参阅我提出的上一个问题
【解决方案2】:

您需要传递这些变量的地址。请务必特别注意函数签名,因为您最终会得到非常奇怪的结果。此外,为您的编译器打开所有警告。

scanf("%d %d", &hour, &min); 

【讨论】:

    【解决方案3】:
    scanf("%d %d", &hour, &min);
    

    【讨论】:

      【解决方案4】:

      您可以将变量初始化为它们自己的地址并“修复”这个问题:

      int hour, min;
      hour = (int)&hour;
      min = (int)&min;
      

      (顺便说一句,我是个聪明人。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多