2016-09-03 94 views
-1

以下是我的代碼到目前爲止。我只是一步一步做這個班級任務。試着不給出整個代碼,我只是想知道我有什麼問題,所以我可以學會修復它。謝謝您的幫助。運行時間檢查失敗#2:

目標是創建班級車手,然後獲得總圈數,比較它們並將它們按照第1到第3的順序排列。我已經在一個簡單的程序中做了這個。現在我正在嘗試創建一個類驅動程序的數組。

到目前爲止,這是工作,它要求正確輸入,並給出了一個輸出,但該方案,我得到年底前:

調試錯誤!

運行時間檢查失敗#2 - 圍繞變量'驅動程序'的堆棧已損壞。

我在這裏找到的答案都不對我的應用程序有意義。在運行程序之前運行構建時,我有0個故障。

我也知道不要使用單個字符變量,我只是這樣做,因爲我知道我失去了什麼,後來改變它們。如下圖所示,因爲如我們知道數組存儲n個元素從位置0到n-1 for循環

#include <iostream> 
#include <string> 

using namespace std; 

class Driver 
{ 
int carNumber; 

public: 
void setNumber(int number) 
{ 
    carNumber = number; 
} 

int getNumber() 
{ 
    return carNumber; 
} 

}; 

int main() 
{ 
int x; 
int i; 
Driver driver[3]; 

for (i = 1; i <= 3; i++) 
{ 
    cout << "Enter Driver " << i << "'s car number: "; 
    cin >> x; 
    driver[i].setNumber(x); 

} 
for (i = 1; i <= 3; i++) 
cout << "driver " << i << "'s number is " << driver[i].getNumber() << endl; 

return 0; 
} 

回答

2

開始。

for (i = 0; i <3; i++) 
    { 
    cout << "Enter Driver " << i << "'s car number: "; 
    cin >> x; 
    driver[i].setNumber(x); 

    } 
2

你的數組訪問索引是錯誤的。

數組從索引0開始,而不是1,並且以小於元素數量的1結束。因此,對於driver[3]的聲明,有效索引爲0,1和2,而不是1,2和3.使用錯誤索引,您正在寫入數組末尾,導致堆棧損壞。

你寫循環應該更像

for (i = 0; i < 3; i++) 
{ 
    cout << "Enter Driver " << i << "'s car number: "; 
    cin >> x; 
    driver[i].setNumber(x); 

} 

你需要做一個類似的修復,以讀取循環。

+0

謝謝!我想我曾經這樣做過,並且改變它以獲得不同的輸出。 – clwood

相關問題