Questions tagged «variable-length-array»

12
为什么可变长度数组不是C ++标准的一部分?
在过去的几年中,我很少使用C。今天,当我阅读此问题时,遇到了一些我不熟悉的C语法。 显然,在C99中,以下语法有效: void foo(int n) { int values[n]; //Declare a variable length array } 这似乎是一个非常有用的功能。是否曾有关于将其添加到C ++标准的讨论,如果是,为什么将其省略? 一些潜在的原因: 编译器厂商难以实施 与标准的其他部分不兼容 可以使用其他C ++结构来模拟功能 C ++标准声明数组大小必须是一个常量表达式(8.3.4.1)。 是的,我当然知道在玩具示例中可以使用std::vector<int> values(m);,但这会从堆而不是堆栈中分配内存。如果我想要像这样的多维数组: void foo(int x, int y, int z) { int values[x][y][z]; // Declare a variable length array } 该vector版本变得很笨拙: void foo(int x, int y, int z) …



9
数组类型与使用malloc分配的数组之间的区别
今天,我用一些C代码帮助了我的一个朋友,但我发现了一些奇怪的行为,无法解释他为什么会这样。我们有一个TSV文件,其中包含一个整数列表,int每行一行。第一行是列表中的行数。 我们也有一个带有非常简单的“ readfile”的ac文件。第一行被读取为n,即行数,然后进行了以下初始化: int list[n] 最后一个为环n带fscanf。 对于小n(直到〜100.000),一切都很好。但是,我们发现,当n大(10 ^ 6)时,将发生段错误。 最后,我们将列表初始化更改为 int *list = malloc(n*sizeof(int)) 一切都很好,即使很大n。 有人可以解释为什么会这样吗?是什么引起的段错误int list[n],在我们开始使用时已停止list = malloc(n*sizeof(int))?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.