欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年02月24日 11:10:35   作者:beating-fish  
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的數(shù)組越界訪問(wèn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

1.問(wèn)題引入

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

試問(wè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ì)造成死循環(huán)里???

疑惑鴨???

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

2、問(wèn)題分析

(1)理論分析

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

首先我們知道局部變量在存在棧區(qū)中,存儲(chǔ)方式為先使用高地址再使用低地址,然而數(shù)組存儲(chǔ)方式開辟一塊地址然后地址由低到高依次存儲(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)哈!?。?/p>

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • OpenCV實(shí)現(xiàn)雙邊濾波算法

    OpenCV實(shí)現(xiàn)雙邊濾波算法

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)雙邊濾波算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C/C++實(shí)現(xiàn)磁盤相關(guān)操作的示例代碼

    C/C++實(shí)現(xiàn)磁盤相關(guān)操作的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C/C++如何實(shí)現(xiàn)磁盤相關(guān)操作,例如遍歷磁盤容量、實(shí)現(xiàn)磁盤格式化、移除指定磁盤等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • Qt實(shí)現(xiàn)矩形大小任意縮放的示例代碼

    Qt實(shí)現(xiàn)矩形大小任意縮放的示例代碼

    這篇文章主要介紹了Qt如何實(shí)現(xiàn)在窗口上繪制任意大小的矩形,并且通過(guò)邊角的拖曳按鈕可改變矩形大小,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法

    MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法

    這篇文章主要介紹了MFC創(chuàng)建模態(tài)對(duì)話框和非模態(tài)對(duì)話框的方法,需要的朋友可以參考下
    2014-07-07
  • QT實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    QT實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C++數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)

    C++數(shù)據(jù)結(jié)構(gòu)之單鏈表的實(shí)現(xiàn)

    線性表的鏈?zhǔn)酱鎯?chǔ)又稱為單鏈表,它是指通過(guò)一組任意的存儲(chǔ)單元來(lái)存儲(chǔ)線性表中的數(shù)據(jù)元素。本文將用C++實(shí)現(xiàn)單鏈表,需要的可以參考一下
    2022-05-05
  • C++中的覆蓋和隱藏詳解

    C++中的覆蓋和隱藏詳解

    這篇文章主要介紹了C++中重載、重寫(覆蓋)和隱藏的區(qū)別,是C++面向?qū)ο蟪绦蛟O(shè)計(jì)非常重要的概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • C++如何實(shí)現(xiàn)廣義表詳解

    C++如何實(shí)現(xiàn)廣義表詳解

    廣義表是非線性結(jié)構(gòu),其定義是遞歸的。那么下面跟著小編一起看看如何用C++實(shí)現(xiàn)廣義表,有需要的可以參考借鑒。
    2016-08-08
  • C++的繼承特性你了解嗎

    C++的繼承特性你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的繼承特性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • uboot添加自定義命令的實(shí)現(xiàn)步驟

    uboot添加自定義命令的實(shí)現(xiàn)步驟

    uboot 屬于bootloader的一種,是用來(lái)引導(dǎo)啟動(dòng)內(nèi)核的,它的最終目的就是從flash中讀出內(nèi)核,放到內(nèi)存中,啟動(dòng)內(nèi)核,這篇文章主要介紹了uboot添加自定義命令的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2022-11-11

最新評(píng)論