首页 > 解决方案 > GCC 如何在堆栈上创建一个数组而不用常量变量给出它的大小?

问题描述

这个例子是如何编译和运行的?

#include <iostream>

int main() {
    int input;
    std::cin >> input;
    int arr[input];
    return 0;
}

我的理解是,由于input在编译期间不知道 ' 的值,它必须是一个堆分配的数组。程序启动时不是为数组(没有在堆上分配)分配了堆栈空间吗?

标签: c++gccheap-memorystack-memory

解决方案


我的理解是,由于在编译时输入的值是未知的,所以它必须是一个堆分配的数组。

你的理解是正确的。

程序启动时不是为数组(没有在堆上分配)分配了堆栈空间吗?

实际上,执行堆栈的内存通常在程序启动时分配。这不是 C++ 语言指定的内容,而是实现细节。

这个例子是如何编译和运行的?

该程序格式不正确。编译器不需要编译程序并且需要诊断问题(如果它不诊断它,那么编译器不符合 C++ 标准)。编译器仍然可以将程序编译为语言扩展。C++ 语言没有指定这是如何发生的。


推荐阅读