【发布时间】:2012-03-15 00:25:43
【问题描述】:
短篇小说。 . .我正在尝试覆盖 new 和 delete 运算符。新的似乎没问题,但删除时我对这段代码有问题
cCellList::~cCellList()
{
STPINT loop;
for (loop = 0; loop < count; loop++)
{
delete cells[loop];
}
free(cells);
}
这里的删除不会转到我的覆盖删除运算符,所以事情没有解决。堆栈跟踪说
ExeName.exe!Cell::'scalar deleting destructor'()
ExeName.exe!cCellList::~cCellList()
ExeName.exe!Cell::'scalar deleting destructor'()
正在执行的代码行是
delete cells
其中cells 的类型为cCellList *。
说来话长。我已经在这个可执行文件上工作了将近 20 年,兼职,它有大约 14 MB 的源代码。所有非托管 C++,目前使用 VS2010。我从一个名为“Think C with Object-oriented extensions”的编译器开始。可能你们中的许多人还太年轻,不记得那些日子。
内存管理问题有时会导致奇怪的事情发生。我早就知道可以在这个程序上使用像 Purify 这样的第三方解决方案了。当我尝试检测代码时,它们只会爆炸。因此,我编写了自己的 malloc/free,并将它们连接起来以更好地跟踪内存中发生的情况。到目前为止,我正在用我自己的系统分配所有内存,但在这种情况下,它会转到正常的“免费”而不是我的,结果可预测。
【问题讨论】:
-
如果你已经编码超过 20 年,你应该知道如何创建一个最小的测试用例。请创建一个,然后在此处发布,然后我们可以为您提供帮助!
-
你已经编码了将近 20 年,而且你正在“编写自己的 malloc/free”,却不知道如何在 C++ 中使用
operator new重载?!跨度>