C 风格的数组是否在堆上分配了运行时长度? [C++] [重复]

问题描述 投票:0回答:1

我知道 C++ 中的固定大小数组是在堆栈上分配的,并且我知道使用 new[] 关键字创建的动态大小数组将在堆上分配。

但是考虑一下这段代码:

std::cout << "Enter a length of the array: "
int length{};
std::cin >> length;

int arr[length]{};

for (int i{ 0 }; i < length; ++i)
{
    arr[i] = i;
    std::cout << arr[i] << ' ';
}
std::cout << '\n'

编译没有问题。那么我假设此类数组隐式放置在堆上是否正确?如果是这样,它是如何工作的,该数组使用的内存是否也在隐式释放后释放?

c++ heap-memory stack-memory
1个回答
2
投票

这不是标准 C++。

您使用的编译器支持在同一文件中混合使用 C 和 C++ 功能。对可变长度数组的支持是 C 功能。

变长数组通常存储在堆栈中。这或多或少相当于用

alloca()
分配数组。

(我建议避免使用可变长度数组。由于它们不是 C++ 的一部分,因此它们可能与某些 C++ 功能交互很差,并且大多数 C++ 编译器根本不支持它们。您可能想使用

std::vector
来代替。)

© www.soinside.com 2019 - 2024. All rights reserved.