【发布时间】:2017-07-16 02:14:15
【问题描述】:
我最近对以前工作的代码做了一些小改动,现在程序在执行时会立即遇到分段错误。事实上,它甚至没有进入 main 的第一行。
这里是代码的开头:
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 行只是 main 方法的左大括号(“{”)。没有实际代码。
我以前从未遇到过如此奇怪的错误,我对这是怎么发生的感到困惑。在出现此错误之前,一开始的代码根本没有改变,而且在新代码附近的任何地方甚至都没有发生分段错误这一事实让我大吃一惊。我放在 main 中的任何代码都没有被执行,所以我不能完全打印出值来看看出了什么问题。
另外,我尝试在有/没有命令行参数的情况下运行程序,看看这是否是原因。它不会改变任何东西。
【问题讨论】:
-
src/prog.c中的第 35 行是什么?你做了哪些改变?如果您还原这些更改,它会起作用吗? -
第 35 行是“{”。主要的开口支架。至于更改,它们是在几个小时前进行的,并且文本编辑器已关闭,因此我无法撤消所做的更改。
-
基础:代码
#include <stdio.h>,#include <stdbool.h>? -
您能否提供一个可以重现此错误的代码并与我们分享?
-
您的程序在堆栈上放置了多少数据?在 Windows 中,堆栈限制(默认情况下)仅为 1 兆字节)
标签: c segmentation-fault gdb argv argc