这可能很容易解决。我不知道我做错了什么,请帮助这个超级简单的代码。
#include <iostream>
using namespace std;
int main()
{
int arraysize, i, a[arraysize], n, j;
cout << "array size";
cin >> arraysize;
for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){
a[i] = j;
cout << "a[" << i << "] = " << a[i] << endl;
}
}
执行该程序时,它将输出5个数组值,然后出现分段错误。我不知道如何解决这个和\或如何正确执行此类问题。感谢任何帮助,谢谢。
答案 0 :(得分:3)
arraysize
时, a
没有指定值,这意味着您在指定a
的大小时调用了未定义的行为。
此代码的非未定义行为版本是:
#include <iostream>
//Don't use "using namespace std;"!
//using namespace std;
int main()
{
//removed unused/unnecessary variables
int arraysize;
std::cout << "array size";
std::cin >> arraysize;
int a[arraysize];
for(int i = 0; i < arraysize; i++) {
int j = arraysize - i;
a[i] = j;
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
}
<强>无论其即可。像这样在运行时指定数组大小是该语言的非标准扩展,并且可能无法在所有环境中使用。如果您希望此代码符合标准,则需要使用std::vector
。
#include <iostream>
#include <vector>
int main()
{
int arraysize;
std::cout << "array size";
std::cin >> arraysize;
std::vector<int> a(arraysize);
for(int i = 0; i < arraysize; i++) {
int j = arraysize - i;
a[i] = j;
std::cout << "a[" << i << "] = " << a[i] << std::endl;
}
}
我已从您的代码for these reasons中删除了using namespace std;
的使用。
答案 1 :(得分:0)
这显然是未定义的行为 首先,C ++标准不支持可变长度数组。 这是一些编译器的扩展(如gcc)。
其次,当您实例化一个数组时,arraysize
的值是未定义的,因此结果是不可预测的,它可能在某些情况下有效,但这是基于纯粹的运气。
如果您需要动态大小数组,最好使用std::vector
。
#include <iostream>
using namespace std;
int main()
{
int arraysize, i, n, j;
std::vector<int> a;
cout << "array size";
cin >> arraysize;
std::vector<int> a(arraysize);
for(int i=0, j = arraysize; i < arraysize, j > 0; i++, j--){
a[i] = j;
cout << "a[" << i << "] = " << a[i] << endl;
}
return 0;
}