以下是我的代码。我只是一步一步地进行课堂作业。试着不给出整个代码,我只想知道我有什么问题所以我可以学习解决它。谢谢你的帮助。
目标是创建类驱动程序然后获得总圈数,比较它们并按照第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;
}
答案 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);
}
您需要对读取循环进行类似的修复。