[英]Using register variables in recursion?
#include <stdio.h>
void main()
{
register int x = 0;
if (x < 2)
{
x++;
main();
}
}
輸出:
segmentation fault
為什么我遇到細分錯誤?
注冊與此錯誤無關。 它只是一種存儲類。
即使沒有注冊,它也會顯示核心轉儲。
核心轉儲的原因是由於遞歸導致堆棧溢出。
請嘗試在x ++之后和main()之前使用printf(“%d”,x);
如果(x <2)
{
x++;
printf("%d",x);
main();
}
堆棧溢出的原因是每次您遞歸調用main()時,x都會重新初始化為0,因此始終滿足條件if(x < 2)
並導致堆棧溢出。
嘗試使用靜態存儲類來避免此錯誤。
因為“注冊”是編譯器的建議,所以哪些編譯器可以自由忽略。 他們說“請將此變量放入寄存器中”,但這不會改變代碼中x
的范圍。 這意味着將調用main,然后在堆棧上創建一個名為x保留空間的局部變量,將其初始化為零,等等,依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.