【问题标题】:Delete a pointer c++删除指针 c++
【发布时间】:2015-12-31 19:15:25
【问题描述】:

我有一个 c++ 程序,如果用户输入更多元素,它的一部分会增加指针的大小。该指针具有与结构 Entry 关联的类型,增加指针大小的函数是

Entry *size_increase(Entry *neuu, int *size){
   *size = *size+10;
   Entry *new_neu = new Entry[*size];
   for (int i=0; i<*size; ++i) {
       new_neu[i]=neuu[i];
   }

   return new_neu;
}

指针neuu是要增加的指针,size是它的初始大小。在此函数结束时,我想删除输入指针 neuu,以释放内存。

问题是:如果我有这个序列

delete neuu;
return new_neu;

编译器在接受两个用户输入并打印错误后停止,而不是上面代码中的那个

对象 0x1002042b8 的错误:未分配被释放的指针

那我怎样才能删除指针呢?

编辑:一些用户询问最初如何分配 neuu。最初我有

Entry *neu = new Entry[1];

并且每当用户尝试输入第二个项目时,都会调用一个函数

   neu = size_increase(neu,size);

这两个都发生在 main 函数中。

【问题讨论】:

  • 我们看不到为neuu 分配内存的代码。我猜它永远不会被分配。你能显示调用size_increase的代码吗?
  • 您应该使用delete[] 来表示数组。
  • 尽可能避免使用new,改用std::vector
  • 但是如果它没有为neuu分配任何内存那么它就不会运行。无需删除代码即可完美运行。我想在这里提一下代码,但又怕它弄乱了页面。
  • @JameyD 你是对的。谢谢。考虑将您的回复添加为答案:)

标签: c++ pointers


【解决方案1】:

由于您的neuu 是使用new[] 创建的,因此您应该使用delete[] 而不是delete

【讨论】:

  • 我们不知道neuu 是如何创建的。
  • @MillieSmith 根据我们所做的 cmets 和 [] 运算符。
  • @MillieSmith:现在我添加了neu的初始化。
  • @AminR。我看到。谢谢。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 2010-09-08
  • 2021-07-30
  • 2011-09-18
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多