【问题标题】:Dynamic memory allocation in C++ require the new operator new?C++ 中的动态内存分配需要 new 运算符 new?
【发布时间】:2011-07-28 23:20:38
【问题描述】:
int d;
cin >> d;
int asdf[d];

这被认为是动态内存分配吗?根据http://www.cplusplus.com/doc/tutorial/dynamic/,似乎我什至不能编译它,因为不使用 new 运算符的数组只能声明为常量大小,也许我读错了。 (我正在使用带有 GNU CCC 编译器的 CodeBlocks)

和有什么区别

int d;
int *asdf;
cin >> d;
asdf = new int[d];

唯一的区别是使用新创建的数组直到它被删除,而第一个数组在你离开作用域后立即被释放?

【问题讨论】:

    标签: c++ memory dynamic new-operator


    【解决方案1】:

    int x[n]; 是一个可变长度数组 (VLA),它具有自动存储持续时间(即“在堆栈上”)。它在 C89 或 C++98/03 中无效,但它是在 C99 中引入的,通常作为扩展提供,例如在 GCC 中。

    该功能也可以在某些平台上使用非标准的alloca() 函数来模仿,该函数在 VLA 普及之前就已使用。

    【讨论】:

    • 感谢您回答我的问题并告知我有关 C99 的信息
    【解决方案2】:

    第一种方法分配的内存来自分配给应用程序的堆栈。当您使用 new 时,内存是从堆中分配的,堆可以提供比从堆栈中获得的足够多的内存。但是要使用 new 你的变量必须是与你的数组相同类型的指针。指针变量保存第一个内存单元的地址。 int * a = 新的 int[x];将保存 x 个内存单元,如果您在程序仍在运行时专门删除指针,将被释放。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2015-04-11
      相关资源
      最近更新 更多