我最近对以前工作的代码做了一些小改动,现在程序在执行时立即遇到分段错误。事实上,它甚至没有成为主要的第一行。
以下是代码的开头:
int main (int argc, char* argv[])
{
fprintf(stderr, "Not even getting here!\n");
bool d;
bool v;
...
}
来自gdb的相应输出(编译时包含-g标志)。 警告:禁用地址空间随机化时出错:成功
Program received signal SIGSEV, Segmentation fault.
0x0000000000400978 in main (argc=<error reading variable: Cannot access
memory at address 0x7fffca168f1c, argv=<error reading variable: Cannot
access memory at address 0x7fffca168f10>) at src/prog.c:35
仅供参考:第35行只是主要方法的开头括号(&#34; {&#34;)。没有实际的代码。
我之前从未遇到过如此奇怪的错误,我对这是怎么回事感到困惑。在出现此错误之前,开头的代码根本没有改变,并且分段错误甚至不会发生在新代码附近的任何地方这一事实让我大吃一惊。我输入的任何代码都没有被执行,因此我无法打印出值以查看出错的地方。
另外,我尝试使用/不使用命令行参数运行程序,看看是否是原因。它没有改变任何东西。
答案 0 :(得分:13)
如果没有整个代码,很难肯定地说,但基于其他SO帖子和个人经验,我认为你有太多空间分配给main()堆栈上的变量。您可以比较一下您使用的字节数,以及允许程序从操作系统中获得的堆栈大小。透视。请参阅以下帖子:Segmentation Fault before main
答案 1 :(得分:1)
发现错误。我有一个结构,其中包含50个其他结构的数组,该数组中的每个元素都有一个包含50个其他结构的数组。我很快将数组的大小更改为1,以确保这是原因,所以它是。
现在主要执行代码。