【问题标题】:Simple array memory allocation with size dynamic allocated and predetermined size具有大小动态分配和预定大小的简单数组内存分配
【发布时间】:2014-07-09 15:52:09
【问题描述】:

我正在写一个程序,突然有一个疑问。 我有两种分配静态数组的方法。

int main ()
{ 
   int a[10];
}
int main()
{
    int N;
    cin >> N;  //assume i input N as 10
    int a[N];
}

两种情况下的内存分配有何不同? 在第二种情况下会在运行时分配吗?

【问题讨论】:

  • 标准 C++ 中不允许第二个版本。
  • 或标准 C,就此而言
  • 可以认为是 Does “int size = 10;” yield a constant expression? 的副本,简短摘要可变长度数组是有效的 C99,但不是有效的 C++,但它被多个编译器支持为 C++ 中的扩展。
  • 吹毛求疵,这些数组都不是“静态的”。它们是“自动”的。

标签: c++ c arrays memory-management dynamic-arrays


【解决方案1】:

第二种方式是不允许的。第一种方法将在堆栈上创建内存。一旦 main() 退出,它将被取消分配。如果你想要动态分配最好的方法是使用 new:

int* = new int[N];

但是这样你最终将不得不删除它。如果您可以使用 STL,那么只需使用 std::vector:

std::vector<int> a;

【讨论】:

    【解决方案2】:

    第二个编译好了。但这是错误的。标准 C/C++ 不允许这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2021-12-02
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2016-05-14
      • 2021-01-15
      相关资源
      最近更新 更多