當數組訪問超出下標

對於一個數組,當訪問越界時,無論是讀還是寫都產生不可預期的結果。

但是對超界部分讀時,結果雖然不可預期,但是程序卻不會出現異常。

對越界部分進行寫操作時就會出現異常。

#include<iostream>
#include<memory>
using namespace std;

int main(){
	shared_ptr<int> smartPtr(new int[10]);
	for (int i = 0; i < 10; i++){
		smartPtr.get()[i] = i*i;
	}
	for (int i = 0; i < 11; i++){
		cout << smartPtr.get()[i] << endl;
	}
	getchar();
}
在堆區動態分配的數組,讀取時沒有問題。

但是對一個長爲n的數組arr,在degub模式下,由於有斷言保護,對arr[n]進行寫操作時就會有問題了(release模式下不會報錯):


在棧區分配的數組,在越界讀取時出現的錯誤:


出現這些問題的原因就在於對未分配的堆棧區進行寫操作,使得堆棧損壞了。

看文章:http://www.cnblogs.com/flysnail/archive/2011/09/21/2184114.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章