Bha*_*tan 0 c segmentation-fault
以下代码1没问题
#include <stdio.h> // code 1
main()
{
printf("%u",main);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码2给出了分段错误.
#include <stdio.h> // code 2
main()
{
printf("%u",main());
}
Run Code Online (Sandbox Code Playgroud)
我没有得到main和main()之间的区别?
您是否编译了编译器启用的所有警告?有了gcc这意味着我们的-Wall参数gcc(并-g在调试信息很有用).
首先,你的printf("%u", main)应该是printf("%p\n", main).该%p打印指针(技术上函数指针不是根据需要为数据指针%p,实际上他们往往有相同的大小和类似的表示),并且你应该换行结束您的格式字符串\n.这需要在地址中的main功能,并通过该地址printf.
然后,你的第二个printf("%u", main())呼吁printf由一个获得的参数递归调用的main函数.这个递归永远不会结束,你炸掉你的调用堆栈(即堆栈溢出),所以SIGSEGV在Unix上得到一个.
讽刺的是,它main是C标准的一个非常特殊的名称,你可能不应该调用它(它被启动代码自动神奇地称为crt0.o).递归main是非常糟糕的味道,可能是非法的.
另请参阅我的其他的答案在这里.