为什么这个c ++程序会导致系统崩溃?

时间:2017-09-26 02:09:47

标签: c++

#include <iostream>
using namespace std;

int main()
{
  int nums[20] = { 0 };
  int a[10] = { 0 };

  cout << a << endl;
  cout << nums << endl;

  cout << "How many numbers? (max of 10)" << endl;
  cin >> nums[0];
  for (int i = 0; i < nums[0]; i++)
  {
     cout << "Enter number " << i << endl;
     cin >> a[i];
  }
  // Output the numbers entered
  for (int i = 0; i < 10; i++)
        cout << a[i] << endl;
  return 0;
}

如果运行了这个程序,我们输入255表示有多少个数字,每个数字输入9个,这会导致它崩溃。

3 个答案:

答案 0 :(得分:1)

因为int a[10] = { 0 };并且您尝试将其编入索引超过第10个单元格或位置9。 你需要修复你的for循环

  for (int i = 0; i <  nums[0]; i++)
  {
     cout << "Enter number " << i << endl;
     cin >> a[i];
  }

或更改初始化中单元格的长度

答案 1 :(得分:0)

为什么你的程序会崩溃?您只为a分配了10个元素。

您告诉用户"(max of 10)"。用户忽略此项并在255中键入。在进行任何其他操作之前,您需要检查用户是否已收听您的警告。

cout << "How many numbers? (max of 10)" << endl;
cin >> nums[0];

// Has the user listened to your warning?
if (nums[0] > 10) {
    cout << "Bad input!" << endl;
    return 0;
}

答案 2 :(得分:0)

您正在使用nums[0]作为循环的最大界限

  for (int i = 0; i < nums[0]; i++)
  {
     cout << "Enter number " << i << endl;
     cin >> a[i];
  }

在你的情况下,你正在做255个循环,并且在每次迭代中你将值添加到a[i]

您声明数组a的大小为10个元素,但您尝试添加255个元素。

这就是问题所在。 a的大小需要与主循环(nums[0])的最大边界值相同。