运行时检查失败#2:

时间:2016-09-03 18:06:00

标签: c++

以下是我的代码。我只是一步一步地进行课堂作业。试着不给出整个代码,我只想知道我有什么问题所以我可以学习解决它。谢谢你的帮助。

目标是创建类驱动程序然后获得总圈数,比较它们并按照第1到第3位的顺序排列。我已经在一个简单的程序中做到了这一点。现在我正在尝试创建类驱动程序的数组。

到目前为止这是有效的,它要求输入正确,并提供输出但在程序结束之前我得到:

调试错误!

运行时检查失败#2 - 围绕变量'驱动程序'被腐败了。

我在这里找到的答案都没有对我的申请有意义。在运行程序之前运行构建时,我有0次失败。

我也知道不要使用单个字符变量,我只是这样做,因为我知道我错过了什么,后来改变了它们。

#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 个答案:

答案 0 :(得分:2)

启动循环,如下所示,因为我们知道数组存储从位置0到n-1的n个元素。

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

    }

答案 1 :(得分: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);

}

您需要对读取循环进行类似的修复。