#include <stdio.h>
void main()
{
register int x = 0;
if (x < 2)
{
x++;
main();
}
}
输出:
segmentation fault
为什么我会出现分段错误?
答案 0 :(得分:4)
注册与此错误无关。它只是一种存储类。
即使没有注册,也会显示核心转储。
核心转储的原因是堆栈溢出因为递归。
尝试在x ++之后和main();
之前使用printf(“%d”,x)if(x <2)
{
x++;
printf("%d",x);
main();
}
堆栈溢出的原因是每次在递归时调用main(),x re初始化为0,因此始终满足条件if(x < 2)
并导致堆栈溢出。
尝试使用静态存储类来避免此错误。
答案 1 :(得分:1)
因为'register'是编译器的建议,所以编译器可以自由忽略。他们说“请将此变量放在寄存器中”,但它不会改变代码中x
的范围。这意味着将调用main,然后创建一个名为x的局部变量,在堆栈上保留空间,将其初始化为零等,等等。