很抱歉,可能会有重复(我没有找到答案):
我们需要确保变长数组的分配已经成功完成吗?
例如:
void func(int size)
{
int arr[size];
if (arr == NULL)
{
// Exit with a failure
}
else
{
// Continue as planned
}
}
看起来很明显答案是“是”,但语法“arr == NULL”感觉有点不寻常。
谢谢
更新:
我承认我没有确保上面的代码是否可以编译(假设它可以)。
如果不能编译,则意味着无法断言变长数组的分配。
因此,我认为如果分配失败,则程序会立即崩溃。
这将是一个非常尴尬的情况,因为程序在非法内存访问(读取或写入)之后崩溃是有道理的,但在内存分配不成功后崩溃就不合适了。
或者分配不会导致任何问题,但是一旦我访问超出堆栈范围的条目时,我可能会遇到内存访问违规(如堆栈溢出)...?
老实说,如果有更多的本地变量跟随它们(特别是其他VLAs),我甚至看不到VLAs如何在堆栈上分配,因此我也希望在这个问题上得到答案。