gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:22:20 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/54490402/

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