我为可能的重复道歉(无法找到答案):
我们是否需要确保变长数组的分配已经成功完成?
例如:
void func(int size)
{
int arr[size];
if (arr == NULL)
{
// Exit with a failure
}
else
{
// Continue as planned
}
}
答案似乎很明显yes,但语法arr == NULL
感觉有点不寻常。
谢谢
更新:
我承认我还不确定上面的代码是否可以编译(假设可以编译)。
如果它不编译,则意味着没有办法断言可变长度数组的分配。
因此,我假设如果分配失败,那么程序会立即崩溃。
这将是一个非常尴尬的情况,因为程序在非法内存访问(读取或写入)后崩溃是有意义的,但在内存分配不成功后崩溃是有意义的。
或者,分配可能不会导致任何事情,但是一旦我在“落入”堆栈之外的条目访问数组,我可能会遇到内存访问冲突(如堆栈溢出)......?
老实说,如果 VLA 后面有更多的局部变量(特别是其他 VLA),我什至看不到 VLA 是如何在堆栈上分配的,所以我也希望能得到关于这个问题的答案。