我建了个容器,点击鼠标就会new一个对象放到容器中,这些对象有生命周期,假设是1秒,生命周期到后就销毁现在的问题是,我一直按鼠标,一会以后就会崩掉,报下列错误{
  Windows 已在 Launcher.exe 中触发一个断点。  其原因可能是堆被损坏,这也说明 Launcher.exe 中或它所加载的任何 DLL 中有 bug。  输出窗口可能提供了更多诊断信息
}请问有可能是什么原因,断点就是停在new对象的地方

解决方案 »

  1.   

    new出来的空间是不会自动释放滴
      

  2.   

    呃,我设了生存周期了,时间到了就把new出来的对象释放
      

  3.   

    是不是用了DLL
    在DLL中new 然后在调用程序中 delete就会有这种现象。
      

  4.   

    dll倒是的确用的不过,我代码就是在dll里的,new和delete都是在dll中实现的我刚又上网查了下,这类问题是不是基本和内存越界有关呢?
      

  5.   

    创建OBJECTBULLET* pObj = new OBJECTBULLET;pObj->pBullet = new CBullet;
    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了
      

  6.   

    SAFE_DELETE是什么?
    如果频繁new频繁delete的东西,建议先分配好对象池。否则有内存碎片问题。
      

  7.   

    SAFE_DELETE就是个简单的宏定义#define SAFE_DELETE(p) { if((p) != NULL) { delete (p); (p)=NULL; } }
      

  8.   

    OBJECTBULLET* pObj = new OBJECTBULLET;
    pObj->pBullet = new CBullet;
    SAFE_DELETE只删除了第一个new,第二个没有删除。泄漏哦
      

  9.   

    如果OBJECTBULLET的析构没有对pBullet的释放,那么有泄漏。
    删除如果不在UI线程,可能会有多线程冲突。
    很有可能是内存越界,建议屏蔽掉OBJECTBULLET和CBullet内核心代码测试一下是否有同样问题
      

  10.   

    已经证实是CBullet内核心代码出的问题,请问有没有什么好的调试方法,因为CBullet继承了其他类很难找啊
      

  11.   

    单步跟进去,很可能cbullet内部指针崩溃