具有大小动态分配和预定大小的简单数组内存分配

Posted

技术标签:

【中文标题】具有大小动态分配和预定大小的简单数组内存分配【英文标题】: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++ 中的扩展。 吹毛求疵,这些数组都不是“静态的”。它们是“自动”的。 【参考方案1】:

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

int* = new int[N];

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

std::vector<int> a;

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于具有大小动态分配和预定大小的简单数组内存分配的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C++ 中的动态内存分配?

通过动态分配创建数组后,在C中通过realloc改变内存大小时出现问题

如何从函数返回动态分配的指针数组?

动态内存分配

如何复制动态分配的对象(具有一个类的 const 成员)

char数组的动态内存分配