【发布时间】:2014-01-31 22:24:22
【问题描述】:
我想在堆栈上创建一个在运行时大小不同的数组。据我所知,这在 c++ 中总是非法的:
void local_array(unsigned int i) {
int arr[i];
}
但是,可以使用递归在堆栈上动态分配内存。有没有不使用递归的不同方法来实现这一点?如果不是,有哪些技术限制阻碍了上述示例的实现?
【问题讨论】:
-
@Blacktempel std::vector 在堆上分配内存。
-
我不知道你想做什么,我也不确定你是否知道。在 B 中,除非它不在堆栈中(arr != null),否则堆栈中始终有一个包含 1 个元素的数组。
-
如果没有像 gcc 这样的实现扩展(它支持您显然想要的 VLA),您将无法从仅符合标准的实现中获得运行时支持。至少不是现在。 (而 B 甚至不接近连续数组)。
-
@user270349 我不确定你的意思。该函数被递归调用,每次调用它都会在堆栈上添加一个整数。这加起来就是一个整数数组。一个 int 指针可以指向堆栈上的东西——在这种情况下,它指向第一次调用 local_array_recursive 时压入的整数。一旦 i 为 0,则数组已完全构造,可以像任何其他数组一样读写。
-
我不相信您对该数组的位是连续的有任何保证。