我正在使用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);
}
答案 0 :(得分:1)
部分
*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或更高版本中是实现定义的,除非您有一些特殊的理由要使用非标准签名。