我有一个500万行4列的文件像往常一样,我试着用一个五百万乘四的数组来读取数据。
long M = 5000000;
double *coordinates[M];
for (i = 0; i < M; i++){
coordinates[i] = (double *) calloc(3, sizeof(double));
}
但是当我运行这个代码时,它有段错误在网上搜索答案后,我知道这是因为堆栈没有那么多内存。有人建议,如果数组是一维的,就用malloc在堆上分配内存但我需要一个二维数组,我真的需要这么多的内存,我希望有人能帮助我走出这个困境谢谢。
最佳答案
你可以改变
double *coordinates[M];
到
double **coordinates = malloc(M * sizeof(*coordinates));
确保在程序的后面
free
这个内存。for (i = 0; i < M; i++){
free(coordinates[i]);
}
free(coordinates);
关于c - 如何在C中为非常大的二维数组分配内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15813900/