【发布时间】:2018-03-31 17:09:05
【问题描述】:
程序在scanf() 函数处因分段错误而停止。
这是简化的代码:
int main() {
int x = 0;
printf("$ ");
scanf("%i", x);
return 0;
}
当我使用gdb 运行它时,我收到了这条消息:
(gdb) run
Starting program: /home/siery/dev/shell/classes/bin/Recure
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff71f6794 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffe608, errp=errp@entry=0x0) at vfscanf.c:1902
1902 vfscanf.c: No such file or directory.
我尝试在 Internet 上搜索 vfscanf.c,但没有找到很多有用的信息。
顺便说一句。我用新更新的g++编译这个程序,和gdb一样。
【问题讨论】:
-
scanf("%i", &x);您需要传递 X 的引用,而不是值 -
这只是
gdb告诉您它无法向您显示发生段错误的确切位置的源代码(因为您没有标准的来源系统上的库)。这与段错误的原因无关,这是@cleblanc所说的。 -
您无需花时间搜索C标准库函数源代码。您可以假设错误就在您身边。函数名称是调试器的一个很好的提示,哪个函数被错误地调用了。
-
在此过程中,如果这是您的第一次尝试,我预计会很痛苦:1.)
scanf()大部分时间isn't the way to read user input。 2.) "我用 g++ 编译这个程序" 不同的 语言,所以这是一个非常糟糕的主意跨度> -
@Felix "非常糟糕的主意 (tm)"
标签: c segmentation-fault gdb