C++ 分配内存堆栈与堆[重复]

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

我是计算机科学专业的一年级学生,有一个关于堆栈和堆上的内存分配的问题。

int array[10];              // allocates memory on stack
int *ptr = new int[10];     // dynamically allocates memory on heap

// =========== code in question ============
int size;                   // I have intentionally left this variable uninitialized
cout << "enter size: ";
cin >> size;
int array_in_question[size];
// ======= end of code in question =========

for (int i{}; i < size; i++) {
    array_in_question[i] = i + 1;

    cout << array_in_question[i] << " ";
}
cout << endl;

我们的教科书上说,“...编写程序时必须指定数组的大小...”指的是在堆栈上分配内存的代码行。标记为“有问题的代码”的代码块中发生了什么?对我来说,尽管大小在编译时已知,但“array_in_question”似乎正在堆栈上分配。如果必须在编译时知道数组的大小,这怎么可能?

我在stackoverflow上搜索并使用搜索引擎寻找答案,但没有找到我正在寻找的信息。

c++ dynamic-memory-allocation
1个回答
1
投票

标记为“有问题的代码”的代码块中发生了什么

它不是 C++。不幸的是,有些编译器默认将其接受为非标准扩展。您必须查看编译器的文档才能准确了解它在做什么,以及

array_in_question
的限制,特别是它的类型。

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