簡體   English   中英

在遞歸中使用寄存器變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM