16

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

4

1 回答 1

35

你是对的,VLA 基本上总是不安全的。唯一的例外是,如果您确保永远不会使它们大于某个大小,您会觉得制作一个固定大小的数组是安全的,在这种情况下,您不妨只使用一个固定大小的数组。有一类晦涩难懂的递归算法,其中 VLA 可以在无法解决问题(堆栈溢出)和能够解决问题之间产生差异,但在大多数情况下,我建议永远不要使用 VLA。

但这并不意味着 VLA 类型没有用处。虽然 VLA 不好/危险,但指向 VLA的指针类型非常有用。它们使动态分配(通过malloc)多维数组成为可能,而无需手动进行维数运算,如下所示:

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

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

于 2011-09-06T21:58:11.703 回答