几天来,我一直在努力解决堆损坏问题。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();
我希望是出于可能导致此问题的原因,或者是另一个故障排除步骤。