2016-09-03 59 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

相关问题