我有這樣的代碼在C++中即給予怪異輸出:這段代碼爲什麼表現怪異?
#include<iostream>
using namespace std;
int main(){
int r[15]={0};
int n = 5;
r[15]=20;
cout<<n;
}
輸出顯然應5,但它給了我20.現在我知道[R [15]是出界。這段代碼應該拋出一個例外,試圖訪問r [15],不應該嗎?但是,它通常用g ++編譯並給出錯誤的輸出。我無法弄清楚是什麼導致了這種異常。誰能幫忙?
僅供參考,這個代碼僅僅是一個樣品,我不得不從我花了很多它,否則,可能會一直,如果一個異常被拋出保存時間較大的代碼輸出圖這個bug。
更新: 我檢查了下面的代碼:
#include<iostream>
using namespace std;
int main(){
int n = 5;
int r[15]={0};
r[15]=20;
cout<<n;
}
Output:
20
我檢查了下面的代碼太:
#include<iostream>
using namespace std;
int main(){
int n = 5;
int a=5;
int r[15]={0};
r[15]=20;
cout<<n<<endl<<a;
}
Output:
5
5
因此,如果堆棧的解釋是正確的,無論是價值觀應該」在這種情況下也經過了修改,對吧?它沒有。
尤其是當你學習,可以考慮使用'的std ::矢量'和'在()' - 更容易安全使用和'在()如果給定的索引無效'會拋出異常。 –
2012-02-20 08:15:18