不要删除指针

时间:2013-04-30 05:37:51

标签: c++ unix g++

我正在尝试将一些代码移植到Ubuntu Server上的新G ++。我不确定这段代码是做什么的,但是快速浏览一下,它试图删除与指针相关的内存。

    class mem_block
    {
     public:
      class mem_block*    next;
      void*               pntr;
      int                 size;

    mem_block( int i ) {
      record_new( sizeof( mem_block ), MEM_MEMORY );
      size  = i;
      pntr  = new char[size];
      return;
      }

    ~mem_block( ) {
      record_delete( sizeof( mem_block ), MEM_MEMORY );
      delete *pntr; // Troubled line.
      return;
      }
  };

现在我尝试删除[] pntr; (就像它最初的那样),它是当前的形式等等......我讨厌将代码注释掉,因为这会造成大量的内存泄漏。我很有信心。

有什么想法吗?它让我无法删除void *,在这种情况下,void *不是指向对象的类型

2 个答案:

答案 0 :(得分:3)

您需要删除指针本身而不是其引用值,它应该是:

delete [] (char*)pntr;

答案 1 :(得分:2)

来自C ++标准[第5.3.5(3)节]: "在第二种方法(删除数组)中,如果要删除的对象的动态类型与其静态类型不同,则行为未定义。"

在您的情况下,pntr的动态类型是char *,因此使用C ++强制转换显式地通知编译器其类型。

delete [] (static_cast<char*>(pntr));