几天来,我一直在努力解决堆腐败问题.我第一次被vs 2005调试器警告我可能已经损坏了堆,删除了我以前新建的对象.对这个问题进行研究后,我得到了gflags和页面堆设置.为我的特定图像启用此设置后,它应该指向我实际导致损坏的行.
Gflags将相关对象的构造函数识别为罪魁祸首.该对象派生如下:
class POPUPS_EXPORT MLUNumber : public MLUBase
{
...
}
class POPUPS_EXPORT MLUBase : public BusinessLogicUnit
{
...
}
Run Code Online (Sandbox Code Playgroud)
我可以在一个单独的线程中实例化一个MLUNumber,并且不会发生堆损坏.
我可以实例化一个不同的类,它也继承自MLUBase,不会导致堆损坏.
由于在构造函数的左括号上发生损坏而导致访问冲突,这似乎是由于对象的隐式初始化(?).
基类构造函数(MLUBase)成功完成.
从vs 2005中的内存窗口挖掘,似乎没有为实际对象分配足够的空间.我的猜测是,只为基类分配了足够的内容.
导致故障的线路:
BusinessLogicUnit* biz = new MLUNumber();
Run Code Online (Sandbox Code Playgroud)
我希望有任何可能导致这种情况的原因,或者其他故障排除步骤.
不幸的是,根据给出的信息,无法明确诊断问题.
您可能想要检查的一些事项:
delete
通过基指针执行对象时,必须在基类中存在虚拟析构函数,以便正确地销毁子类. 归档时间: |
|
查看次数: |
2253 次 |
最近记录: |