VS下數(shù)組越界導(dǎo)致程序異常崩潰的三種情況

首先,我們要知道的一點(diǎn)是:C/C++ 由于為了提高程序的運(yùn)行效率,編譯器不會(huì)對(duì)數(shù)組越界進(jìn)行檢查(也就是說(shuō)數(shù)組越界編譯時(shí)并不會(huì)報(bào)錯(cuò)),以下,我總結(jié)出了三個(gè)在VS下由于數(shù)組越界導(dǎo)致程序異常甚至崩潰的情況:

1. 超速行駛被交警攔下(Stack around the variable 'array' was corrupted.)

實(shí)例代碼如下:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){
  int array[10];
  array[10] = 20;
  cout << array[10] <<endl;
  system("pause");
  return 0;
}

編譯OK.
運(yùn)行之后的現(xiàn)象:


分析:

這種屬于剛剛越界的情況,它會(huì)導(dǎo)致程序一直在執(zhí)行.所以如果在運(yùn)行過(guò)程中出現(xiàn)了這種異常,那么想一想,是否記錯(cuò)了數(shù)組的下標(biāo)范圍是0~n-1,而你錯(cuò)寫(xiě)成了n,導(dǎo)致超速被交警攔下.

2. 不僅超速還妨礙了他人的車(chē)輛(VS下典型的0xC0000005異常)

實(shí)例代碼如下:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){
  int array[10];
  array[12] = 20;
  cout << array[12] <<endl;
  system("pause");
  return 0;
}

編譯OK
運(yùn)行之后現(xiàn)象:


分析:

這種是數(shù)組越界的典型情況,原因是你越界訪(fǎng)問(wèn)之后修改了其他不該修改的內(nèi)存,所以導(dǎo)致發(fā)生沖突.程序崩潰.超速了還影響了他人的駕駛,被交警攔下.

3. 超速行駛沒(méi)被交警抓到(編譯通過(guò),程序正常運(yùn)行正常退出)

實(shí)例代碼如下:

#include <iostream>
#include <stdlib.h>
using namespace std;

int main(){
  int array[10];
  array[11] = 20;
  cout << array[11] <<endl;
  system("pause");
  return 0;
}

編譯OK,程序正常運(yùn)行正常退出.

分析:

這種屬于比較巧的情況,可以理解為你越界訪(fǎng)問(wèn)的那塊內(nèi)存上沒(méi)有任何的東西,形象地說(shuō) 你超速行駛在無(wú)人監(jiān)管的路段上,沒(méi)有交警來(lái)攔你,當(dāng)然超速仍然是錯(cuò)誤的行為.有一點(diǎn)需要注意的是在VS下,總會(huì)有那么4個(gè)字節(jié)是無(wú)人監(jiān)管區(qū),本人做過(guò)測(cè)試,在數(shù)組越界后的第5~8個(gè)字節(jié)總是無(wú)人監(jiān)管區(qū),目前尚不清楚是什么原因.

總結(jié):

數(shù)組越界是一個(gè)很?chē)?yán)重的問(wèn)題,如果程序崩潰,它通常定位不到出錯(cuò)的那塊代碼,一旦代碼量大,數(shù)組越界尋找錯(cuò)誤是一件很麻煩的事情,一定要避免數(shù)組越界.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問(wèn)題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,120評(píng)論 0 27
  • 第四天 數(shù)組【悟空教程】 第04天 Java基礎(chǔ) 第1章數(shù)組 1.1數(shù)組概念 軟件的基本功能是處理數(shù)據(jù),而在處理數(shù)...
    Java幫幫閱讀 1,680評(píng)論 0 9
  • 初學(xué)編程時(shí),可能經(jīng)常遇到一些程序崩潰的現(xiàn)象。一般來(lái)說(shuō),程序崩潰由于操作不當(dāng)引起的。但是有時(shí)候,因?yàn)橐粋€(gè)程序員的粗心...
    朱潘閱讀 1,316評(píng)論 1 4
  • 面向?qū)ο笾饕槍?duì)面向過(guò)程。 面向過(guò)程的基本單元是函數(shù)。 什么是對(duì)象:EVERYTHING IS OBJECT(萬(wàn)物...
    sinpi閱讀 1,220評(píng)論 0 4
  • 《一株樹(shù)》/前行者 你金雞獨(dú)立,不是在玩雜技,不是曇花一現(xiàn),而是常年生活在這幽谷,懸空峭壁之上。 你沒(méi)得選擇啊...
    前行者1一常德一自由人閱讀 471評(píng)論 0 0

友情鏈接更多精彩內(nèi)容