我是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];
}
我的代码出了什么问题?
编辑:我必须使用数组而不是矢量。
答案 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];
}