我一直在努力解决堆损坏问题。 vs 2005调试器首先警告我,在删除我先前创建的对象之后,我可能破坏了堆。对这个问题进行研究导致我发现了gflags和页面堆设置。在为我的特定图像启用此设置后,它可以使我指向实际上导致损坏的那一行。
Gflags将相关对象的构造函数识别为罪魁祸首。该对象派生如下:
class POPUPS_EXPORT MLUNumber : public MLUBase
{
...
}
class POPUPS_EXPORT MLUBase : public BusinessLogicUnit
{
...
}
我可以在一个单独的线程中实例化一个MLUNumber,并且不会发生堆损坏。
我可以实例化另一个类,该类也从MLUBase继承,不会导致堆损坏。
访问冲突的产生是由于在构造函数的右括号处发生了损坏,这似乎是由于对象(?)的隐式初始化所致。
基类构造函数(MLUBase)成功完成。
从vs 2005的内存窗口中挖掘,似乎没有为实际对象分配足够的空间。我的猜测是仅为基类分配了足够的资源。
导致故障的线路:
BusinessLogicUnit* biz = new MLUNumber();
我希望是可能导致此问题的原因,或者是希望执行其他故障排除步骤。
最佳答案
不幸的是,根据所提供的信息,不可能确切地诊断问题。
您可能需要检查的一些事项:
delete
编码时,必须在基类中存在虚拟析构函数,才能正确地分解子类。 关于c++ - 新对象导致堆损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6472968/