动态数组分配c ++

时间:2013-02-07 08:32:01

标签: c++

我知道如果我新建一些数组我必须删除它:

    int *i=new i[10];

    delete[] i;

静态数组怎么样:

    int i[100];

OR

    int i[]={1,2,3,4};

应该删除吗?

以下代码:

    bool fu()
    {
      for(int i=0;i<100;i++
      {
       int j[]={1,2,3,4};
      }
      return 0;
    }

是j []离开RAM(返回0后);还是它保持在那里并在经过多次迭代后使RAM满了?

因为我想对micro进行编程有点担心。 感谢名单

5 个答案:

答案 0 :(得分:3)

您无需删除它们。它们位于内存中的堆栈中,而不是堆中,并在离开其范围时立即清除。

在你的例子中:当你离开循环时,j被清除。

答案 1 :(得分:3)

  

静态数组怎么样:

int i[100];
int i[]={1,2,3,4};
  

应该删除吗?

否...两个static数据(当这些定义出现在任何函数作用域之外时使用)和基于堆栈的数据(用于函数内的变量)会自动销毁(如果需要)程序分别终止或范围退出。 static变量的内存不需要由程序显式“释放” - 操作系统将在程序终止时回收内存。堆栈内存有点像海滩上的波浪......当进入和退出示波器时,使用(覆盖)相同的内存(在海滩上思考区域)然后自动释放,然后重复使用....

bool fu()
{
  for(int i=0;i<100;i++
  {
   int j[]={1,2,3,4};
  }
  return 0;
}

这里,j[]在堆栈上重新创建 - 虽然C ++标准没有讨论这样的实现细节,但每次通过循环可能在同一地址 - 但它可以通过从常量中重新复制数据来重新初始化(静态)数组,其中为此目的存储{1,2,3,4}。 (如果优化器推断您永远不会更改它,它可能会跳过重新初始化,甚至删除堆栈变量并直接访问常量数组值,甚至删除常量数组并将访问的特定值移动到机器代码操作码中的立即值 - 只要不影响程序性能以外的任何事情,优化器几乎可以做任何事情。

答案 2 :(得分:2)

不,通常不得删除堆栈上的变量。

答案 3 :(得分:1)

看看http://www.learncpp.com/cpp-tutorial/79-the-stack-and-the-heap/,您可以在那里找到对问题的解释

答案 4 :(得分:1)

如果要声明“静态”数组,

static int i [100];

分配给100个整数的内存在整个程序的生命周期内保留。但为此,

int i [100]

内存越来越自由并且已经超出堆栈(因为这是本地的),而这超出了范围。