我有一个大小为 5428x5428 的二维数组,它是一个对称数组。但是在编译时它给了我一个错误,说数组大小太大。谁能给我一个方法?
最佳答案
这个数组对于程序堆栈内存来说太大了 - 那是你的错误。
int main()
{
double arr[5428][5428]; // 8bytes*5428*5428 = 224MB
// ...
// use arr[y][x]
// ...
// no memory freeing needed
}
使用动态数组分配:
int main()
{
int i;
double ** arr;
arr = (double**)malloc(sizeof(double*)*5428);
for (i = 0; i < 5428; i++)
arr[i] = (double*)malloc(sizeof(double)*5428);
// ...
// use arr[y][x]
// ...
for (i = 0; i < 5428; i++)
free(arr[i]);
free(arr);
}
或者分配大小为
MxN
的普通数组并使用 ptr[y*width+x]
int main()
{
double * arr;
arr = (double*)malloc(sizeof(double)*5428*5428);
// ...
// use arr[y*5428 + x]
// ...
free(arr);
}
或使用组合方法:
int main()
{
int i;
double * arr[5428]; // sizeof(double*)*5428 = 20Kb of stack for x86
for(i = 0; i < 5428; i++)
arr[i] = (double)malloc(sizeof(double)*5428);
// ...
// use arr[y][x]
// ...
for(i = 0; i < 5428; i++)
free(arr[i]);
}
关于c - 如何处理大型二维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10249829/