【问题标题】:error in releasing the static array in debug mode [duplicate]在调试模式下释放静态数组时出错[重复]
【发布时间】:2016-04-08 08:22:02
【问题描述】:

为什么在调试模式下释放静态数组有错误?

int main()
{
 int ar[] = { 1,2,3,4,5,6,7,8,9 };
 //other code

 delete(ar);
 // or free(ar);

 return 0;
}

我使用freedelete 来释放数组,并以debug mode 中的错误结束。
我是否正确使用了freedelete
如何释放数组?

【问题讨论】:

  • 您不能动态释放分配在堆栈上的变量。只有先使用“new”才能使用“delete”。
  • 有没有办法释放那个数组?
  • 好吧,它在超出范围后被删除 - 所以在您的示例中 return 0; 之后。
  • 我在其他函数中使用了很多数组,需要释放。
  • 如何释放数组? 在当前函数不退出的情况下,无法释放数组占用的堆栈空间。也许你想改用std::vector

标签: c++ arrays


【解决方案1】:

ar[] 不是在堆上分配,而是在本地/在堆栈上,所以不能(也不应该)删除。

内存在函数(或块{})退出时释放

您只能将deletenewfree()malloc() 一起使用

【讨论】:

    【解决方案2】:

    delete 运算符和“free”函数只能用于指针 在堆上分配自己的内存。您的数组分配在堆栈上,并且 当找不到任何堆结构时,内部实现将崩溃。

    此外,delete 仅适用于用 new 分配的内存 并且仅在使用 malloc、calloc 或 realloc 分配的内存上释放。

    最后一件事是,当您在数组上使用 delete 时,请使用 delete [] 这意味着删除将发生在堆栈上的较早偏移处, 当数组本身的记录被分配时,否则可能会导致内存泄漏或更糟

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多