我建了个容器,点击鼠标就会new一个对象放到容器中,这些对象有生命周期,假设是1秒,生命周期到后就销毁现在的问题是,我一直按鼠标,一会以后就会崩掉,报下列错误{
Windows 已在 Launcher.exe 中触发一个断点。 其原因可能是堆被损坏,这也说明 Launcher.exe 中或它所加载的任何 DLL 中有 bug。 输出窗口可能提供了更多诊断信息
}请问有可能是什么原因,断点就是停在new对象的地方
Windows 已在 Launcher.exe 中触发一个断点。 其原因可能是堆被损坏,这也说明 Launcher.exe 中或它所加载的任何 DLL 中有 bug。 输出窗口可能提供了更多诊断信息
}请问有可能是什么原因,断点就是停在new对象的地方
解决方案 »
- 多文档框架,如何在CDockablePane中显示我做好了的一个dialog?急急急,200分
- 50分求书!!我是SDK初学者,谁能推荐几本SDK的书。
- 关于一个使用loadlibrary显示链接的问题
- 请问已知三个点的坐标,和三个点离第四个点得距离,求第四个点得坐标
- 怎样重绘客户区最简单
- 如何不设断点把程序中的中间结果显示出来。(调试问题)
- 谁来教我一个关于连接的错误!!!!! 在线等!!!
- 程序怎么不能在VC下运行?
- 请问ONTIMER(....)中的参数含义各是什么?
- 会InstallShield的请进来!!!
- 创建自己的消息映射宏
- 哎呀~~没记性~又遇到‘指针错误,无法计算值’的问题~~
在DLL中new 然后在调用程序中 delete就会有这种现象。
pObj->pBullet->Initialize(m_spDynamic, kP, fAngle, 1.0f, 1.0f);m_lBulletNum++;
m_mapId2Bullet[m_lBulletNum] = pObj;
删除map<long, OBJECTBULLET*>::iterator iter;
for(iter = m_mapId2Bullet.begin(); iter != m_mapId2Bullet.end();)
{
OBJECTBULLET* pObj = iter->second;
bool bEnable = pObj->pBullet->IsEnable();
if(bEnable)
{
pObj->pBullet->Update(fTime);
++iter;
}
else
{
SAFE_DELETE(pObj);
iter = m_mapId2Bullet.erase(iter);
}
}
在每次update的时候计算时间,超出生存期IsEnable()就变为false了
如果频繁new频繁delete的东西,建议先分配好对象池。否则有内存碎片问题。
pObj->pBullet = new CBullet;
SAFE_DELETE只删除了第一个new,第二个没有删除。泄漏哦
删除如果不在UI线程,可能会有多线程冲突。
很有可能是内存越界,建议屏蔽掉OBJECTBULLET和CBullet内核心代码测试一下是否有同样问题