C++ 我如何覆盖“引用”;标量删除析构函数();?

C++ 我如何覆盖“引用”;标量删除析构函数();?,c++,memory,C++,Memory,短篇小说。我正在尝试覆盖新建和删除运算符。在new上似乎还可以,但在delete上,我对这段代码有一个问题 cCellList::~cCellList() { STPINT loop; for (loop = 0; loop < count; loop++) { delete cells[loop]; } free(cells); } 正在执行的代码行是 delete cells 其中,单元格的类型为cCellList* 说来话长。我在这个可执行文件上做了将

短篇小说。我正在尝试覆盖新建和删除运算符。在new上似乎还可以,但在delete上,我对这段代码有一个问题

cCellList::~cCellList()
{
  STPINT loop;
  for (loop = 0; loop < count; loop++)
  {
    delete cells[loop];
  }
  free(cells);
}
正在执行的代码行是

delete cells
其中,
单元格
的类型为
cCellList*

说来话长。我在这个可执行文件上做了将近20年的兼职工作,它有大约14MB的源代码。所有非托管C++,目前使用VS2010。我从一个名为“使用面向对象扩展思考C”的编译器开始。也许你们中的许多人太年轻了,不记得那些日子了

内存管理问题有时会导致奇怪的事情发生。我早就通过了第三方解决方案,比如Purify,可以用于这个程序。当我试图插入密码时,他们就爆炸了。因此,我编写了自己的malloc/free,并将它们连接起来,以便更好地跟踪内存发生了什么。到目前为止,我正在用自己的系统分配所有内存,但在这种情况下,它将以正常的“空闲”状态而不是我的状态,并产生可预测的结果

free(cells);
您是否使用
malloc
分配内存

如果是,不要这样做。类不能很好地使用
malloc
<代码>新建存在是有原因的。这里有各种各样的事情可能出错


如果没有,则不要将其释放为
free
。这是未定义的行为。如果您编写了
cells=newcell[n]
进行分配,则必须使用
delete[]cells
取消分配
free
不能代替
delete
delete[]
delete
不能代替
delete[]
,或者在任何组合中都不能代替
delete[]
,反之亦然,无论它“看起来有多有效”或者是谁告诉你的。不正常。

删除操作符的声明是什么


一般来说,重写的malloc()/free()应该采用重写的全局new()/delete()运算符的形式,不要忘记提供向量版本。类似地,这个析构函数应该调用
delete[]单元格
而不是
免费(单元)
,假设“单元”是通过新单元[X]初始化的,它必须是,否则什么都不起作用,特别是虚拟方法。

如果您已经编码了>20年,您应该知道如何创建最小的测试用例。请创建一个,然后张贴在这里,然后我们可以帮助你!也看到这个问题:你已经编码了将近20年,你在写“你自己的MalC/Field'”,不知道如何使用<代码>运算符new <代码> C++中的重载?!
free(cells);