【发布时间】:2026-02-17 04:55:02
【问题描述】:
从Quora复制的以下程序,在main()函数之前打印"Hello world"。
#include <stdio.h>
#include <unistd.h>
int main(void)
{
return 0;
}
void _start(void)
{
printf ("hello, world\n");
int ret = main();
_exit (ret);
}
然后,我使用以下命令在 Ubuntu-14.04 GCC 编译器上编译了上面的程序
gcc -nostartfiles hello.c
并运行了a.out 可执行文件,但我得到了Segmentation fault (core dumped)?那么,为什么分段错误?
【问题讨论】:
-
Why I got Segmentation fault?你试过使用调试器吗?答案可能依赖于 libc 实现的深度,但 glibc 是开源的,你不应该对它进行调试。显然,您需要安装libc6-dbg(或libc-dbg)才能获取调试信息。 -
你在Linux系统上使用
gcc吗? -
是的,我在 Ubuntu 上使用 GCC。
-
在 C 中,执行从
main开始。使您的程序在main之前执行的操作超出了C 的范围。
标签: c gcc segmentation-fault main startup