首页 > 解决方案 > 如果我可以创建一个数组,为什么我需要动态内存分配?

问题描述

我正在阅读有关动态内存分配和静态内存分配的信息,并发现以下有关动态内存分配的信息:

在前面章节中看到的程序中,所有内存需求都是在程序执行之前通过定义所需的变量来确定的。但是可能存在程序的内存需求只能在运行时确定的情况。例如,何时需要的内存取决于用户输入。

所以我用 C++ 编写了以下程序:

#include <iostream>

int main()
{
  int n = 0;
  int i = 0;

  std::cout << "Enter size: ";
  std::cin >> n;
  int vector[n];

  for (i=0; i<n; i++)
  {
    vector[i] = i;
  }

  return 0;
}

这个程序有效。我不明白它是如何工作的。这里的大小是什么时候确定的?在这种情况下如何分配向量?

标签: c++variable-length-arraystatic-memory-allocation

解决方案


据此(强调我的)

ISO C99 允许可变长度自动数组,作为扩展,GCC 在 C90 模式和 C++ 中接受它们。这些数组的声明与任何其他自动数组一样,但其长度不是常量表达式。存储在声明点分配,并在包含声明的块范围退出时释放

请注意,这只是一个扩展,不适用于每个编译器,例如它在 MSVC 中对我不起作用(我收到错误“表达式必须具有常量值”)。


推荐阅读