OpenGL内存泄漏之初始化函数glutInit()

      最近做些OpegGL上的开发,使用freeglut-2.6.0库,发现在MFC的对话框环境下,只要使用了函数glutInit(&__argc, __argv),就有内存泄漏,跟踪代码,发现内存分配在glutInit函数内的如下位置:

void FGAPIENTRY glutInit( int* pargc, char** argv )
{

。。。。。。

if( fgState.Initialised )
        fgError( "illegal glutInit() reinitialization attempt" );

    if (pargc && *pargc && argv && *argv && **argv)
    {
        fgState.ProgramName = strdup (*argv);

        if( !fgState.ProgramName )
            fgError ("Could not allocate space for the program's name.");
    }

    fgCreateStructure( );

。。。。。。

}

函数strdup()会用malloc()分配内存,必须用free()释放,因此,追查fgState.ProgramName 释放的地方,发现回收资源的地方在如下函数:

void fgDeinitialize( void )

{

。。。。。。

  if( fgState.ProgramName )
    {
        free( fgState.ProgramName );
        fgState.ProgramName = NULL;
    }

。。。。。。

}

那么fgDeinitialize是在什么地方被调用的呢?发现在这里:

/*
 * Undoes all the "glutInit" stuff
 */
void FGAPIENTRY glutExit ( void )
{
  fgDeinitialize ();
}

看看这个函数上的注释,也就说明了一切,于是在程序退出前,调用glutExit(),内存泄漏被修补啦!

 

阅读更多
文章标签: mfc null
个人分类: OpenGL程序开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭