如何处理C中的堆栈数组分配失败?

Moe*_*oeb 3 c stack-overflow stack

如果我必须编写如下代码:

int a[10000000];
Run Code Online (Sandbox Code Playgroud)

我知道有时由于堆栈溢出,代码可能会失败.问题是如何在运行时处理这些错误,并避免segfault?

Gre*_*ill 6

通常,堆栈溢出异常很难以优雅的方式处理.这是因为堆栈已经溢出,并且为了运行更多代码(甚至是异常处理代码),需要有可用的堆栈空间.

通常,程序员设计程序使它们不会溢出堆栈.这包括:

  • 保持堆栈上分配的自动变量的大小最小(如果需要大型数据结构,则使用其他类型的分配)
  • 避免不必要的递归,如果使用递归,确保对最大深度有合理的约束

如果在函数内需要1000万个整数空间,请不要在堆栈中分配它 - 使用malloc()或分配它new(取决于您实际使用的是C还是C++).当然,这也是你的责任,free()或者delete当你用它做.

如果你真的在使用C++ [1],那么你可能应该使用std::vector:

std::vector a(10000000);
Run Code Online (Sandbox Code Playgroud)

底层标准库实现将在免费存储上分配空间,在函数返回时自动为您释放空间.

[1]我希望人们不会因为拼写相似而用标记问题.