我有一个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/

10-11 23:18