回覆列表
  • 1 # 酷小帥同學

    下面的程式的輸出結構為死迴圈,著重分析一下原因

    #include<stdio.h>

    int main(){

    int i=1;

    int arr[10]={1,2,3,4,5,6,7,8,9,10};

    for(i=1;i<=12;i++){

    printf("haha\n");

    arr[i]=0;

    }

    return 0;

    }

    ![除錯結果分析](https://img-blog.csdnimg.cn/2020120823165615.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW94aWEzODMyNA==,size_16,color_FFFFFF,t_70#pic_center)

    ![棧區記憶體分析](https://img-blog.csdnimg.cn/20201208232559273.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW94aWEzODMyNA==,size_16,color_FFFFFF,t_70#pic_center)

    在分析之前我們要知道以下知識

    1、可以理解記憶體是一塊大的區域,該區域可分為靜態方法區,堆區和棧區,區域性變數的相關運算在棧區中進行

    2、棧區可分為高地址記憶體和低地址記憶體,變數的存放基本遵從自上而下即從高地址到低地址的存放順序

    3、陣列下標增長,地址由低到高

    經過除錯我們可以發現每次到arr[12]時,i會再次歸零,所以程式會死迴圈,一直執行下去。

    不同的編譯器對越界的不同程度的處理時不一樣的,具體詳情可參考一些參考書,例如《C陷阱與缺陷》

  • 中秋節和大豐收的關聯?
  • 整套變壓吸附制氮機裝置的主要系統有哪幾個?各系統的功能是什麼?