【发布时间】:2015-11-03 02:24:35
【问题描述】:
我正在为我的编程课编写一个多功能程序,其中一个函数需要使用字符串数组。
目标是将 10 个名字存储在一个数组中,然后让用户输入一个随机确定“获胜”名字的数字。
唯一的问题是,一旦我执行我的代码,程序在完成 10 个循环以获取名称后崩溃。这是我试图确定的主要问题,是导致崩溃的原因。
整个程序要大很多,但相关代码如下所示。
string Name1, Name2, Name3, Name4, Name5, Name6, Name7, Name8, Name9, Name10, tempName, winName;
string array[10] = {Name1, Name2, Name3, Name4, Name5, Name6, Name7, Name8, Name9, Name10};
int tempNum = 0;
int winNum;
int userEntry;
int userSelection;
for (int test = 0; test < 11; test++)
{
cout << "Enter a name: ";
cin >> tempName;
array[tempNum] = tempName;
tempNum++;
}
//The program crashes at this exact spot, right after collecting the 10th name
cout << endl;
cout << "Now choose a random number between 1 and 100: ";
cin >> userEntry;
winNum = static_cast<int>(userEntry * 3.14159 + 12.7 * 10) % 10;
winName = array[winNum];
cout << endl;
cout << "The winner of the game is" << winName << "!" << endl;
【问题讨论】:
-
您在使用调试器逐行执行程序时观察到了什么?
-
在你收集第十个名字之后,你试图收集第十一个名字,你注意到了吗?
-
取消引用
array[10] 超出了有效范围! -
@PolarisInParis 调试器还意味着您在单步执行代码时必须密切关注代码。您应该已经看到您正在尝试写信给
array[10]。这超出了范围。 -
抱歉,我把运行时调试器误认为是启动编译器。将来我一定会牢记这一点。