字符串数组导致c++程序崩溃
String Array Causes C++ Program to Crash
我正在为我的编程课编写一个多功能程序,其中一个函数需要使用字符串数组。
目标是在数组中存储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;
在for循环中,您试图访问array[10]
,但这并不存在,因为数组只有10个元素,从0到9。这就是你的程序崩溃的原因。
将for循环中的条件从for (int test = 0; test < 11; test++)
更改为for (int test = 0; test < 10; test++)
,它应该可以工作。
您的数组有10个元素,而您要访问11个元素,从0到10,这会导致程序崩溃。因为你的代码正在访问一个不属于你的程序的位置。将for循环中的条件从test < 11
更改为test < 10
。如果可以的话,使用string
类的" at
"函数,当您尝试访问超出范围的下标时,它会抛出异常。
有两个问题
1,你实例化了一个有10个元素的数组,然后查找它的第11个元素。首先,改变测试<11 .测试<10.这将解决你的崩溃。
其次,您的程序可能会因为大量输入而崩溃。初始化字符串数组时,编译器会为该数组分配一定的内存。
分配给array的内存量由编译器决定。编译器确定每个字符串变量的大小,并将其乘以10得到数组所需的总大小,并相应地分配该大小的内存。
字符串可以动态调整大小,而数组不能。数组有一个固定的内存分配给它。
因此,如果在输入通过覆盖索引保存到数组中的字符串时,您可以向数组中写入超过其容量的字符。
将分配的内存量取决于实现,因为字符串的默认容量取决于实现。
一个简单的解决方法是在开头将名称字符串定义为一个大字符串,如字符串Name1 = "-------------------------";
这样,用户输入的大小很可能比初始值小。
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃