提问人:Toxa 提问时间:10/19/2023 最后编辑:trincotToxa 更新时间:11/11/2023 访问量:77
是否在堆上分配了具有运行时长度的 C 样式数组?[C++][复制]
Are C-style arrays with the run-time length allocated on the heap? [C++] [duplicate]
问:
我知道 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'
它编译没有问题。那么,我假设这些数组隐式放置在堆上是对的吗?如果是这样,它是如何工作的,这个数组使用的内存是否也在隐式释放后释放?
答:
2赞
Dietrich Epp
10/19/2023
#1
这不是标准的 C++。
您使用的编译器支持同一文件中的 C 和 C++ 功能的混合。对可变长度数组的支持是 C 的一项功能。
可变长度数组通常存储在堆栈上。这或多或少等同于使用 分配数组。alloca()
(我建议避免使用可变长度的数组。由于它们不是 C++ 的一部分,因此它们可能与某些 C++ 功能交互不佳,并且大多数 C++ 编译器根本不支持它们。您可能希望改用。std::vector
评论
0赞
Toxa
10/19/2023
谢谢你的回答!这就解释了。
评论
int arr[length]{};
不是标准的 C++。一些编译器具有允许这样做的扩展。