#include<iostream>
using namespace std;
void arrayin(int x[], int n);
void arrayout(int x[], int n);
main()
{
int n, x[n];
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
cout << "Please enter the elements: " << endl;
arrayin(x,n);
cout << "Array is of " << n << " elements."<< endl;
cout << "Elements are as follow :" << endl;
arrayout(x,n);
}
void arrayin(int x[],int n)
{
for (int i = 0; i < n; i ++)
{
cin >> x[i];
}
}
void arrayout(int x[], int n)
{
for (int i = 0; i < n; i++)
{
cout << x[i] << "\t";
}
}
我是编程新手。 如果n> 1,则崩溃超过8个元素。 8次崩溃..但是对于n&lt; 8工作正常.. 不知道为什么!
答案 0 :(得分:5)
问题在于:
int n, x[n]; // It is undefined behaviour
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
正确的方法是(在编译器上使用variable-size-array扩展名):
int n;
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
int x[n];
使用C ++的正确方法是使用std::vector
代替:
int n;
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
std::vector<int> x(n);
并且您必须进行一些其他更改以适应std::vector
。
答案 1 :(得分:3)
问题在于:
int n, x[n]; // <-- n is not yet initialized
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
cout << "Please enter the elements: " << endl;
arrayin(x,n);
你需要这个:
int n;
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
int x[n]; // << now n has been initialized
cout << "Please enter the elements: " << endl;
arrayin(x,n);
BTW:VLA(或你称之为动态数组)在C ++中是非标准的,但gcc(以及可能的铿锵声)将它们作为扩展名。
答案 2 :(得分:2)
int n, x[n];
是问题
您宣布n
具有不确定的值。使用此值,您将声明一个具有不确定大小的数组。
您正在使用C ++,因此在用户输入后使用new
关键字创建数组:
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
int *x = new int[n];
// your stuff
delete x;
答案 3 :(得分:0)
在输入n。
之后声明你的数组#include<iostream>
using namespace std;
void arrayin(int x[], int n);
void arrayout(int x[], int n);
main()
{
int n;
cout << "Please enter the number of elements in the array: " << endl;
cin >> n;
int x[n];
cout << "Please enter the elements: " << endl;
arrayin(x,n);
cout << "Array is of " << n << " elements."<< endl;
cout << "Elements are as follow :" << endl;
arrayout(x,n);
}
void arrayin(int x[],int n)
{
for (int i = 0; i < n; i ++)
{
cin >> x[i];
}
}
void arrayout(int x[], int n)
{
for (int i = 0; i < n; i++)
{
cout << x[i] << "\t";
}
}
此代码有效。问题是当你声明没有n值的数组时,数组将被过去的堆栈中的任何东西初始化。可变长度数组需要该值。所以稍后声明数组。
有人在没有任何理由的情况下投票。
编辑:可变长度数组不是ISO C ++的一部分。要编写符合标准的C ++代码,您应该使用带有g ++或clang的-pedantic
标志。
你有两个简单的选择。可以使用std :: array作为固定长度数组,也可以使用std :: vector作为动态数组。