使用可变长度数组是否安全?

时间:2011-09-06 21:47:37

标签: c variable-length-array

我对可变长度数组感到担心。当我想动态分配一个数组时,如果无法分配足够的内存,我将得到null,我可以在程序中正确响应。对于可变长度数组,我没有得到这些信息。我该怎么办?

1 个答案:

答案 0 :(得分:27)

你是对的,VLA基本上总是不安全的。唯一的例外是如果你确保你永远不会让它们大于你想要安全制作固定大小数组的大小,那么你也可以使用固定大小的数组。有一种模糊的递归算法,其中VLA可以区分无法解决问题(堆栈溢出)和能够,但在大多数情况下,我建议永远不要使用VLA。

但这并不意味着VLA类型无用。虽然VLA很糟糕/危险,但指向VLA 的类型非常有用。它们可以动态分配(通过malloc)多维数组而无需手动执行维度算法,如:

size_t n;
double (*matrix)[n] = malloc(n * sizeof *matrix);

得到一个n-by-n矩阵可寻址为matrix[i][j]