进入main之前的段错误
Segmentation fault before entering main
我最近对以前工作的代码做了一些小改动,现在程序在执行时立即遇到了段错误。事实上,它甚至没有进入 main 的第一行。
这里是代码的开头:
int main (int argc, char* argv[])
{
fprintf(stderr, "Not even getting here!\n");
bool d;
bool v;
...
}
以及 gdb 的相应输出(编译时包含 -g 标志)。
警告:禁用地址 space 随机化时出错:成功
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 行只是 main 方法的左大括号(“{”)。没有实际代码。
我从来没有遇到过这么奇怪的错误,我很困惑这是怎么发生的。在这个错误出现之前,一开始的代码根本没有改变,而且分段错误甚至没有出现在新代码附近的任何地方,这一事实让我非常失望。我放在 main 中的任何代码都没有被执行,所以我无法完全打印出值来查看出了什么问题。
此外,我已经尝试 运行 程序 with/without 命令行参数来查看是否是这个原因。它不会改变任何东西。
没有完整的代码很难确定,但根据其他 SO posts 和个人经验,我认为你有太多 space 分配给堆栈上的变量主要()。从 OS' 的角度比较您使用的字节数以及您的程序允许的堆栈大小对您很有用。请参阅以下 post:Segmentation Fault before main
发现错误。我有一个结构,其中包含 50 个其他结构的数组,该数组中的每个元素也有一个包含 50 个其他结构的数组。我迅速将数组的大小更改为 1 以确保这是原因,事实确实如此。
现在执行 main 中的代码。
我最近对以前工作的代码做了一些小改动,现在程序在执行时立即遇到了段错误。事实上,它甚至没有进入 main 的第一行。
这里是代码的开头:
int main (int argc, char* argv[])
{
fprintf(stderr, "Not even getting here!\n");
bool d;
bool v;
...
}
以及 gdb 的相应输出(编译时包含 -g 标志)。 警告:禁用地址 space 随机化时出错:成功
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 行只是 main 方法的左大括号(“{”)。没有实际代码。
我从来没有遇到过这么奇怪的错误,我很困惑这是怎么发生的。在这个错误出现之前,一开始的代码根本没有改变,而且分段错误甚至没有出现在新代码附近的任何地方,这一事实让我非常失望。我放在 main 中的任何代码都没有被执行,所以我无法完全打印出值来查看出了什么问题。
此外,我已经尝试 运行 程序 with/without 命令行参数来查看是否是这个原因。它不会改变任何东西。
没有完整的代码很难确定,但根据其他 SO posts 和个人经验,我认为你有太多 space 分配给堆栈上的变量主要()。从 OS' 的角度比较您使用的字节数以及您的程序允许的堆栈大小对您很有用。请参阅以下 post:Segmentation Fault before main
发现错误。我有一个结构,其中包含 50 个其他结构的数组,该数组中的每个元素也有一个包含 50 个其他结构的数组。我迅速将数组的大小更改为 1 以确保这是原因,事实确实如此。
现在执行 main 中的代码。