0

我正在尝试将一些代码移植到 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;
      }
  };

现在我试过 delete [] pntr; (因为它最初是),它是当前形式,等等......我不想将代码注释掉,因为我敢肯定这会造成大量内存泄漏。

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

4

2 回答 2

3

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

delete [] (char*)pntr;
于 2013-04-30T05:41:10.097 回答
2

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

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

delete [] (static_cast<char*>(pntr));
于 2013-04-30T06:45:33.923 回答