C語言陷阱與缺陷之?dāng)?shù)組越界訪問詳解
1.問題引入
一道經(jīng)典的筆試題來了,請做好準(zhǔn)備?。?!
試問以下代碼在Visual studio 2019環(huán)境下執(zhí)行結(jié)果?原因?
#include <stdio.h>
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án)里???
疑惑鴨???
這樣一個看似淺顯的代碼卻存在一個大大的陷阱等著你,讓我們一起來分析哈!
2、問題分析
(1)理論分析
很顯然出現(xiàn)了數(shù)組越界訪問但是為什么會造成死循環(huán)里???
首先我們知道局部變量在存在棧區(qū)中,存儲方式為先使用高地址再使用低地址,然而數(shù)組存儲方式開辟一塊地址然后地址由低到高依次存儲。

這樣在越界訪問時可能會導(dǎo)致問題?。?!
數(shù)組越界訪問到Arr[12]會改變i的值導(dǎo)致了死循環(huán)哈?。。?/p>
(2)調(diào)試驗(yàn)證

由此可見i的地址和arr[12]的地址是一樣的,這樣在數(shù)組越界訪問中在修改arr[12]的值時把i的值改掉了,之后每次循環(huán)到此處都產(chǎn)生同樣的結(jié)果造成了死循環(huán)哈?。。?/p>
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用
這篇文章主要介紹了C++下如何將TensorFlow模型封裝成DLL供C#調(diào)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析
本篇文章是對虛函數(shù)與純虛函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建,本文使用Visual Studio作為開發(fā)IDE,是不同于其它教程的,需要的朋友可以參考下2014-09-09
C++ 靜態(tài)成員的類內(nèi)初始化詳解及實(shí)例代碼
這篇文章主要介紹了C++ 靜態(tài)成員的類內(nèi)初始化詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02

