我正试图在c++中创建一个巨大的2D数组,如下所示:
float array[1000000][3];
我必须在这个有3个组件的数组中存储一些值。对于1000个循环的循环,这将通过两个循环迭代完成。当我尝试运行这个时,我得到了一个错误:
Segmentation fault
这是我的一点代码:
int m=0,c=0;
float error;int count=0;
array<array<float, 1000000>, 3> errors;
for(int i=0; i<1000; i++){
for(int j=0; j<1000; j++){
error=distance(j+20,m,c,1000-matrix(1,j));
errors[count][0]=error;
errors[count][1]=m;
errors[count][2]=c;
c++;
count++;
}
m++;
c=0;
}
sort(errors.begin(), errors.end());
cout<<errors[0][0]<<endl<<errors[0][1]<<endl<<errors[0][2]<<endl;
即使在注释出排序…后,错误仍在继续
矩阵(1,j(是一个矩阵,我使用这个方法访问它的元素。
我想要误差的最小值,以及误差最小的m和c的一组值。
我有什么办法做到这一点吗?提前谢谢。
您可以使用array
轻松执行任务。这里你可以:
#include<array>
using namespace std;
然后,让我们创建您的数据阵列:
const int N = 1000000;
const int M = 3;
array<array<float, N>, M> my_array;
您可以通过以下操作填充这个新创建的数组:
for(int i=0; i < N; i++){
for(int j=0; j < M; j++){
my_array[i][j] = 0.0f; // Just for example
}
}
有关如何使用array
库的更多信息,请参阅此处的
如果您不想使用array
,您也可以按照以下步骤进行:
const int N = 10000000;
const int M = 3;
float *my_array
my_array = new float[N*M]; // give it a memory on the stack
if(my_array == nullptr){
cerr << "ERROR: Out of memory" << endl;
}
for(int i=0; i < N; i++){
for(int j=0; j < M; j++){
*(my_array + i*N + j) = 0.0f; // Just for example
}
}
确保释放通过以下操作获得的内存:
delete [] my_array;