programname.exe在Windows 10中有“已停止工作”对话框

时间:2016-08-17 06:26:45

标签: c eclipse windows gcc windows-10

我正在使用Windows 10,TDM-GCC和Eclipse NEON开发工具,点击运行按钮后无法执行该程序,并且我没有看到它在编译后抛出的任何错误消息。它显示了未执行程序的Windows 10对话框,其中显示"问题导致程序停止正常工作。如果解决方案可用,Windows将关闭程序并通知您。"

我正在尝试运行的程序 -

#include<stdio.h>

 int first;
 int second;
 int *firstreference;
 int *secondreference;

 void calledbyvalue(int input);
 void calledbyreference(int *input);

  void calledbyvalue(int input){

   //disabling the buffer
   setbuf(stdout, NULL);

   printf("Enter the first value - ");
   scanf("%d", &input);
   printf("Value entered for first is - %d", input);
   printf("Entered input is - %d",input);

  }

  void calledbyreference(int *inputreference){

    //disabling the buffer
    setbuf(stdout, NULL);

    printf("Enter the second value - ");
    scanf("%d", &inputreference);
    printf("Value entered for second is - %d", inputreference);
    printf("Entered input reference value is - %d",&inputreference);

   }

   void main(){

   *firstreference = &first;
   *secondreference = &second;

  //Calling user defined functions here .... 
  calledbyvalue(first);
  calledbyreference(firstreference);

 calledbyvalue(second);
 calledbyreference(secondreference);

}

1 个答案:

答案 0 :(得分:1)

部分

*firstreference = &first;
*secondreference = &second;

通过解除引用NULL来调用未定义的行为,这是静态指针变量的初始值,没有显式初始化。不要那样做。要指定指向firstsecond的指针,请使用

firstreference = &first;
secondreference = &second;

也是部分

scanf("%d", &inputreference);
printf("Value entered for second is - %d", inputreference);
printf("Entered input reference value is - %d",&inputreference);

通过将指向具有错误类型的对象的指针传递给scanf()并将具有错误类型的数据传递给printf()来调用未定义的行为。你想要的可能是这个:

scanf("%d", inputreference);
printf("Value entered for second is - %d", *inputreference);
printf("Entered input reference value is - %d",*inputreference);

还有一点需要注意,您应该在托管环境中使用标准int main(void)而不是void main(),这在C89中是非法的,在C99或更高版本中是实现定义的,除非您有一些特殊的理由要使用非标准签名。