//编程中第一次遇到这样的有关问题,关于函数参数和输入
//编程中第一次遇到这样的问题,关于函数参数和输入
当调用函数
void menu(int* n)
{
printf("菜单:");
printf("1.hua");
printf("2.niao");
printf("3.tuichu");
printf("请输入您选择的序号:");
scanf("%d",n);
}
用gcc编译能通过,但是运行出错为段错误,用gdb调试在第9行(也就是scanf行)报错,提示为:
Program terminated with signal SIGSEGV,Segmentation fault.
0x00a1ab2f in_IO_vfscang_internal () from /lib/libc.so.6
再往下运行,则系统显示:
Program terminated with signal SIGSEGV,Segmentation fault.
The program no longer exists.
这是为什么?怎么办?
------解决方案--------------------
main里面将指针赋值为0
menu里面用scanf,等于往0这个地址写入数据,肯定段错误啊。
可以这样改一下
void main()
{
int i;
menu(&i);
}
------解决方案--------------------
当调用函数
void menu(int* n)
{
printf("菜单:");
printf("1.hua");
printf("2.niao");
printf("3.tuichu");
printf("请输入您选择的序号:");
scanf("%d",n);
}
用gcc编译能通过,但是运行出错为段错误,用gdb调试在第9行(也就是scanf行)报错,提示为:
Program terminated with signal SIGSEGV,Segmentation fault.
0x00a1ab2f in_IO_vfscang_internal () from /lib/libc.so.6
再往下运行,则系统显示:
Program terminated with signal SIGSEGV,Segmentation fault.
The program no longer exists.
这是为什么?怎么办?
------解决方案--------------------
main里面将指针赋值为0
menu里面用scanf,等于往0这个地址写入数据,肯定段错误啊。
可以这样改一下
void main()
{
int i;
menu(&i);
}
------解决方案--------------------