對於一個數組,當訪問越界時,無論是讀還是寫都產生不可預期的結果。
但是對超界部分讀時,結果雖然不可預期,但是程序卻不會出現異常。
對越界部分進行寫操作時就會出現異常。
#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