【问题标题】:Invalid delete of a pointer to a class指向类的指针的无效删除
【发布时间】:2023-03-17 09:40:01
【问题描述】:

我的析构函数和/或释放分配的内存似乎有问题。 这是我的简单代码:

void* Init(){
    try {
       Facebook* DS = new Facebook();
       return (void*)DS;
    } catch(std::bad_alloc&) {
       return NULL;
    }
} 

这是释放此函数分配的内存的函数:

void Quit(void** DS){
   delete (Facebook*)DS;
   *DS = NULL;
   return;
}

如果我只是简单地调用这两个函数,我会在删除行得到一个无效的删除,并且新分配的内存丢失了。

这是 facebook 类:

class Facebook {
   private:
   List<Troll*> trollsList;
   AVLTree<PostByLikes> likesTree;
   AVLTree<PostById> idTree;
   int maxPost;
 }

并且在这个类的构造函数中没有分配内存...

【问题讨论】:

  • 请看RAII 并取消这样的代码
  • Quit 应替换为析构函数。
  • [OT]: Init() 可以简化为return new (std::no_throw) Facebook();

标签: c++


【解决方案1】:

您没有删除 Facebook 对象。

试试这个:

void Quit(void** DS)
{
   delete (*DS);
   *DS = NULL;
}

【讨论】:

  • 谢谢!你是对的!我确实删除了(Facebook*)(*DS) 并且成功了!
  • @OmriShn:如果它解决了您的问题,请您接受答案。谢谢
【解决方案2】:

试试这个

void Quit(void** DS){
   Facebook* pDS = (Facebook*)(*DS);
   delete pDS;
   *DS = NULL;
   return;
}

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2016-07-13
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2011-09-14
    • 1970-01-01
    • 2014-08-22
    相关资源
    最近更新 更多