C ++通过for循环

时间:2016-03-07 23:42:48

标签: c++ arrays

我是C ++的初学者,并试图通过for循环将数据插入到数组中,但是,它会抛出Stack around the variable 'numArray' was corrupted.

我的代码:

//Initializing and declairing variables
int numVal = 0;
int numArray[] = {0};

cout << "Enter the number of values to average: ";
cin >> numVal;

//Loop through to accept all values and allocate them to an array
for (int i = 0; i < numVal; i++) {
    cout << "[" << i << "] = ";
    cin >> numArray[i];
}

我的代码出了什么问题?

编辑:我必须使用数组而不是矢量。

5 个答案:

答案 0 :(得分:3)

int numArray[] = {0}

在此行中,指定numArray可以包含一个整数。稍后,当您尝试输入多于一个整数的任何内容时,您将获得undefined behavior。把它想象成一个承诺。这条线是你承诺的#34;给我一个记忆位置,我保证我不会读取或写过任何超过第一个 n 地址的东西。&#34;当你违背这个承诺时,任何理论上都可能发生。

要修复它,您需要为此阵列分配更多内存,并检查以确保您永远不会定义超过该数字的内容。或者,更简单,更c ++的方法是使用一个自动为您执行此操作的数组,例如vector

如果你真的必须使用数组,请确保在输入了许多元素时有一些跟踪方法。例如:

const int SIZE = 10;
int numArray[SIZE];

...

std::cout << "Enter the number of values to average (less than " << SIZE << ")" << std::endl;
std::cin >> numVal;
if (numVal >= SIZE)
{
    std::cout << "Please enter a number smaller than " << SIZE << std::endl;
}

答案 1 :(得分:1)

假设你想用数组动态地做所有事情:

#include <iostream>
using namespace std;

int main() {
  //Initializing and declairing variables                                                                                       
  int numVal = 0;
  int *numArray;

  cout << "Enter the number of values to average: ";
  cin >> numVal;

  numArray = new int[numVal];

  //Loop through to accept all values and allocate them to an array                                                             
  for (int i = 0; i < numVal; i++) {
    cout << "[" << i << "] = ";
    cin >> numArray[i];
  }

  delete[] numArray;

  return 0;
}

始终记得通过调用delete来释放堆内存。为了更好地衡量,请始终使用valgrind测试您的计划。

答案 2 :(得分:0)

int numArray[] = {0};表示创建一个大小为1的数组。 C样式数组必须在声明中指定它们的大小(显式地,或者从你已经完成的初始化器的数量推导出来)。

以后不能种植或调整大小。当你执行cin >> numArray[1]时,你写出数组的界限,导致堆栈损坏。

如果你想要一个可调整大小的数组,那么在C ++中称为vector。你的代码是:

vector<int> numArray;

// ... in loop
int temp = 0;
cin >> temp;
numArray.push_back(temp);

答案 3 :(得分:0)

const int size = 10;
int a[size]; // The size of the matrix

for(int i=0;i< size ;i++)
{
    cout<<"Enter the number of values to average\n";
      // You have made the counter variable the same 
     // as the name of the incremental matrix variable
    cin >> a[i]; //Add an element within the array

}
for(int i=0;i< size ;i++) //Print matrix elements
{
    cout<<a[i]<<"  ";
}

答案 4 :(得分:-1)

您正在编写C ++,而不是C;使用C ++容器类。

std::vector<int> numArray;
int numVal = 0;

cin >> numVal;

numArray.resize(numVal); // add numVal entries to the vector

for (int i = 0; i < numArray.size(); ++)
{
    cout << "[" << i << "]" = ";
    cin >> numArray[i];
}