我的程序是opengl+VC做的,在MFC下实现
运行程序时,内存直线上升,10秒左右就差不多死机了
我建立了个类,是绘制一些图形的
在void CFIRSTView::OnDraw(CDC* pDC)调用
CFIRSTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity(); m_bsipic=new bsipic();
m_bsipic->light0(0,10,-20,128);
//  m_bsipic->LoadGLTexture();
    m_bsipic->picter(4,-4,-10); //显示组合图形
    m_bsipic->airplane(0,8,-50); //组合飞机 glFlush();
::SwapBuffers(m_pDC->GetSafeHdc());咨询了别人,说是内存泄漏,我检查了下,应该是m_bsipic=new bsipic();的问题
清除缓存的语句是不是要加:delete m_bsipic;
放在哪里好呢?具体的该怎么做啊?
请大家帮忙,谢谢了!

解决方案 »

  1.   

    m_bsipic是不是一个Class的Member Variable?
      

  2.   

    我在FIRSTView.h中这个定义的
    bsipic* m_bsipic;
      

  3.   

    那就是类成员变量。 可以在构造函数new,析构函数delete.
      

  4.   

    delete m_bsipic要放在析构函数中
      

  5.   


    谢谢,刚试下来,确实问题解决了,不过有出来了个新的问题我在类bsipic中的构造函数中有纹理
    bsipic::bsipic()
    {
    g_text = gluNewQuadric();
       LoadT8("aa.BMP",g_cactus[0]);
       LoadT8("bb.BMP",g_cactus[1]);
    }
    这样的话,程序运行中,贴图确实不能显示了
    还要麻烦你指导下了
      

  6.   

    bsipic应该是一个公共类,可以在APP函数中直接定义一个全局类的变量* m_bsipic,同时为它分配内存,直接extern,这样就不会每次都去重新分配内存了
      

  7.   

    要不将程序上传到CSDN上我下载了看看吧
      

  8.   

    看样子,你的类成员变量在其他地方有使用。这样,你在OnDraw中判断是否是NULL,如果不是NULL,就Delete之。
    然后再New出这个对象。在析构函数中,也判断是否为Null,非Null就Delete之。
      

  9.   

    内存泄露内存泄露内存泄露内存泄露内存泄露内存泄露内存泄露
    就算是用双缓存也会有泄漏呀。我也遇到这个问题了,每次增加12k,又找不到能用得起来的boundcheck,烦恼呀~~~~~
      

  10.   

    恩,按你的思路调了下,在Ondraw里面判断为NULL时,就new了下,在析构函数里判断不为null时,就删除
    现在已经正常了,谢谢你了啊