gpt4 book ai didi

c - 如何处理大型二维数组

转载 作者:行者123 更新时间:2023-12-05 01:26:16 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com