日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

C語(yǔ)言陷阱與缺陷之?dāng)?shù)組越界訪問(wèn)詳解_C 語(yǔ)言

作者:beating-fish ? 更新時(shí)間: 2022-04-27 編程語(yǔ)言

1.問(wèn)題引入

一道經(jīng)典的筆試題來(lái)了,請(qǐng)做好準(zhǔn)備!!!

試問(wèn)以下代碼在Visual studio 2019環(huán)境下執(zhí)行結(jié)果?原因?

#include 
int main()
{
    int i = 0;
    int arr[10] = {0};
    for(i=0; i<=12; i++)
   {
        arr[i] = 0;
        printf("Hello World!\n");
   }
    return 0;
}

運(yùn)行結(jié)果:

想不到吧為什么會(huì)造成死循環(huán)里???

疑惑鴨???

這樣一個(gè)看似淺顯的代碼卻存在一個(gè)大大的陷阱等著你,讓我們一起來(lái)分析哈!

2、問(wèn)題分析

(1)理論分析

很顯然出現(xiàn)了數(shù)組越界訪問(wèn)但是為什么會(huì)造成死循環(huán)里???

首先我們知道局部變量在存在棧區(qū)中,存儲(chǔ)方式為先使用高地址再使用低地址,然而數(shù)組存儲(chǔ)方式開(kāi)辟一塊地址然后地址由低到高依次存儲(chǔ)。

這樣在越界訪問(wèn)時(shí)可能會(huì)導(dǎo)致問(wèn)題!!!

數(shù)組越界訪問(wèn)到Arr[12]會(huì)改變i的值導(dǎo)致了死循環(huán)哈!!!

(2)調(diào)試驗(yàn)證

由此可見(jiàn)i的地址和arr[12]的地址是一樣的,這樣在數(shù)組越界訪問(wèn)中在修改arr[12]的值時(shí)把i的值改掉了,之后每次循環(huán)到此處都產(chǎn)生同樣的結(jié)果造成了死循環(huán)哈!!!

總結(jié)

原文鏈接:https://blog.csdn.net/weixin_52822783/article/details/123084028

欄目分類
最近更新