關於C語言數組越界的示範程式

來源:互聯網
上載者:User
引子:今天上課老師出了一道C語言數組越界的題目,雖然不難,但牽扯到記憶體配置和數組越界的相關知識,感覺自己真是孤陋寡聞啊,還以為都沒辦法運行呢。。回來試了一下,還正好遇到了點問題,下面總結一下~ PS:用codeblocks木有找到看記憶體的地方額。。。只能printf出來了。。。代碼:
#include <stdio.h>main(){    int v1;    int a[3];    int v2;    int i;    v1 = 10;    v2 = 20;    printf("v1 addr = %x, array addr = %x, v2 addr = %x, i addr = %x\n",           &v1, a, &v2, &i);    printf("v1 = %d, v2 = %d\n", v1, v2);    for(i=-1; i<=3; i++)    {        a[i] = i*2;    }    printf("v1 = %d, v2 = %d\n", v1, v2);    return 0;}

根據變數根據聲明順序存放在棧中,根據CPU的不同可能有所區別,我的CPU是intel i5的處理器,棧底是高地址,所以存放如下:

結果:問題:如果修改聲明順序,記憶體分布自然也會不同,因為壓入棧的先後發生了變化,可能造成意想不到的後果,比如修改為:
 int v1;    int v2;    int a[3];    int i;

則記憶體分布為:程式運行結果,將運行不下去,進入死迴圈:原因是在進入for迴圈時,語句 a[i] = i*2; 恰好修改了i(a[-1])的值,迴圈結束i++,即-2加一編程-1,i = -1繼續死迴圈,我隨手寫的例子,還挺巧的呵呵~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.