gpt4 book ai didi

c - 当内存不足时,如何防止变长数组崩溃?

转载 作者:太空狗 更新时间:2023-10-29 16:52:17 24 4
gpt4 key购买 nike

在支持可变长度数组之前,我会像这样动态分配它们:

int foo(size_t n)
{
int *arr = malloc(n * sizeof int);
if (!arr) return ENOMEM; /* not enough memory */
.
. else do stuff with arr[]
.
free(arr);
return 0;
}

有了变长数组,我现在可以让它看起来更干净:

int bar(size_t n)
{
int arr[n];
.
. do stuff with arr[]
.
return 0;
}

但是现在我没有“内存不足”检查。事实上,如果 n 太大,程序就会崩溃。

如果 n 太大,我如何从 bar(n) 中优雅地退出?

最佳答案

情况与任何其他局部变量完全相同 - 像这样的声明:

int baz(void)
{
int arr[100000];
.
. do stuff with arr[]
.
return 0;
}

有完全相同的问题。 “解决方案”一如既往——不要递归太深,也不要分配具有自动存储持续时间的非常大的数据结构(在这些情况下继续使用 malloc() ). “非常大”的值在很大程度上取决于您的环境。

换句话说,不要声明 int array[n]; 除非你知道 n 有一个合理的值,这样你会很高兴将该最大大小的数组声明为普通的非可变修改类型数组。

(是的,这意味着可变修改的类型数组并不像它们最初出现时那样有用,因为与仅将数组声明为所需的最大大小相比,您的 yield 微乎其微)。

关于c - 当内存不足时,如何防止变长数组崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151172/

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