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

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

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

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

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

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