2012-06-09 114 views
1

我也遇到過,當我寫代碼很奇怪的問題,這是我的C++代碼:很奇怪的C++錯誤

#include <iostream> 
using namespace std; 

int main() 
{ 
    int qnum; 
    cin >> qnum; 
    int series[3]; 
    cin >> series[3]; 
    cout << qnum; 
} 

例如,如果我的qnum輸入2和5系列[3] qnum的價值將在代碼。此問題的最後一行覆蓋將只有當一系列的輸入3.新的唯一的解決辦法是增加發生「靜態」屬性qnum,就像這樣:

#include <iostream> 
using namespace std; 

int main() 
{ 
    static int qnum; 
    cin >> qnum; 
    int series[3]; 
    cin >> series[3]; 
    cout << qnum; 
} 

有什麼建議嗎?

+2

您可以從0開始計數。因此,串聯的最後一個有效索引是[2] –

+0

您應該在啓用所有警告的情況下編譯您的代碼。每個體面的編譯器都應該警告這樣的事情。 – pmr

+0

@pmr:我想,取決於你對「體面」編譯器的定義。 GCC沒有'-Wall -Wextra'(儘管也許有一些其他更隱蔽的標誌可以檢測到這一點)。 –

回答

11

沒有series[3]。只有series[0],series[1]series[2](陣列從0到N-1)。

您正在註銷數組的末尾,導致未定義的行爲。

+0

謝謝你回答,我是一個新手,對於問這樣愚蠢的問題感到抱歉。 –

+0

哦,我知道這是一個緩衝區覆蓋的地方,但我沒有注意到他正在寫入3個數組的第四個元素。 – Zoey