我正在使用 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);
}
最佳答案
部分
*firstreference = &first;
*secondreference = &second;
通过取消引用 NULL
来调用未定义的行为,这是没有显式初始化的静态指针变量的初始值。不要那样做。要将指针分配给 first
和 second
,请使用
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 或更高版本中,除非您有特殊原因使用非标准签名。
关于c - programname.exe 在 Windows 10 中已停止工作对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38989470/