进入main之前的分段错误

moo*_*oot 4 c gdb segmentation-fault argv argc

我最近对以前工作的代码做了一些小改动,现在程序在执行时立即遇到分段错误.事实上,它甚至没有成为主要的第一行.

这是代码的开头:

int main (int argc, char* argv[])
{
    fprintf(stderr, "Not even getting here!\n");

    bool d;
    bool v;        
    ...
}
Run Code Online (Sandbox Code Playgroud)

和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
Run Code Online (Sandbox Code Playgroud)

仅供参考:第35行只是主要方法的左大括号("{").没有实际的代码.

我之前从未遇到过这样一个奇怪的错误,我对这是怎么回事感到困惑.在出现此错误之前,开头的代码根本没有改变,并且分段错误甚至没有发生在新代码附近的任何地方这一事实让我大吃一惊.我放在main中的任何代码都没有被执行,因此我无法打印出值以查看出现了什么问题.

此外,我尝试使用/不使用命令行参数运行程序,看看是否是原因.它没有改变任何东西.

Squ*_*rel 15

没有整个代码,很难肯定地说,但基于其他SO帖子和个人经验,我认为你有太多空间分配给main()堆栈上的变量.您可以根据操作系统的角度比较您使用的字节数以及允许程序使用的堆栈大小.请参阅以下帖子:主要之前的分段错误