我想知道为什么以下程序会产生此错误。我已经尝试了在线gdb编译器,并且工作正常。我已经在线搜索了它,有人建议使用向量而不是数组,但是我不能,因为我需要在这里使用数组。有人可以为我的程序提供一些建议以使其正常运行吗?
我必须通过VPL提交此程序,该程序在Linux上运行,并且带有-pedantic错误标志。
程序将从用户输入中输出方差(var)。
#include <iostream>
using namespace std;
double jum(double arrayz[], int y) {
double total=0, jumlah;
for (int i=0; i<y; ++i) {
total+=arrayz[i];
}
jumlah = total/y;
return jumlah;
}
double rata2(double arrayz[], int y) {
double total=0,average;
for (int i=0; i<y; ++i) {
total+=arrayz[i];
}
average = total/y;
return average;
}
int main() {
double data,average,jumlah;
int y;
cin >> y;
double arrayz[y]={};
for (int i=0; i<y; ++i) {
cin >> data;
arrayz[i]=data;
}
average=rata2(arrayz, y);
for (int i=0; i<y; ++i) {
arrayz[i]=(arrayz[i]-average)*(arrayz[i]-average);
}
jumlah=jum(arrayz, y);
cout << "Variance : " << jumlah;
return 0;
}
任何答案将不胜感激!
答案 0 :(得分:1)
如果您真的不能使用std::vector
,那么只需执行以下操作:
double *arrayz = new double[y];
然后,在程序结束时,再次释放内存:
delete[] arrayz;
我想知道为什么以下程序会产生此错误。我有 在在线gdb编译器上进行了尝试,效果很好。
是的,VLA实际上不是C ++的一部分,但是某些编译器仍然允许它作为编译器扩展。正如您从-pedantic
中学到的,通常,可以将允许这样做的对象配置为发出警告。
但是,您真的不能使用std::vector
吗?似乎很需要编写C ++程序,但不允许使用这种基本容器。在那种情况下,程序也可能在允许VLA的C语言中。您将制作一个像这样的向量:
std::vector<int> arrayz(y);
并更改函数签名以引用这样的引用:
double jum(std::vector<int> &arrayz, int y) {
double rata2(std::vector<int> &arrayz, int y) {