CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  图形处理/算法

请大家看看这段程序(关于内存泄漏的问题)

楼主Johnal(炊烟赶落日,晚雨带斜阳)2003-08-01 07:58:57 在 VC/MFC / 图形处理/算法 提问

我最近在我的openGl程序中出现了内存泄漏,经查,问题出在以下这段代码(在程序中不断重复调用),但是好象没有什么问题,请问是什么回事,怎么解决?  
  AUX_RGBImageRec   *TextureImage[1];  
  TextureImage[0]=auxDIBImageLoad("data/b.bmp");  
  glGenTextures(1,   &texture); glBindTexture(GL_TEXTURE_2D,   texture);  
  glTexImage2D(GL_TEXTURE_2D,   0,   3,   TextureImage[0]->sizeX,   TextureImage[0]->sizeY,   0,   GL_RGB,   GL_UNSIGNED_BYTE,   TextureImage[0]->data);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);  
  gluBuild2DMipmaps(GL_TEXTURE_2D,   3,   TextureImage[0]->sizeX,   TextureImage[0]->sizeY,   GL_RGB,   GL_UNSIGNED_BYTE,   TextureImage[0]->data);  
   
  if   (TextureImage[0])  
  {  
  if   (TextureImage[0]->data) {  
  free(TextureImage[0]->data); }  
   
  free(TextureImage[0]); //   Free   The   Image   Structure  
  } 问题点数:50、回复次数:2Top

1 楼smch(Ashes Of Time)回复于 2003-08-01 08:15:18 得分 0

可能是你使用的这一堆函数中某个里面导致内存泄漏。  
  Top

2 楼xuguilin(桂林)回复于 2003-08-01 10:52:06 得分 50

我看不出有什么内存泄漏问题,不过我可以把我常用的一种写法给你看看:  
   
  AUX_RGBImageRec   *LoadBMP(char   *Filename) //   Loads   A   Bitmap   Image  
  {  
  FILE   *File=NULL; //   File   Handle  
   
  if   (!Filename) //   Make   Sure   A   Filename   Was   Given  
  {  
  return   NULL; //   If   Not   Return   NULL  
  }  
   
  File=fopen(Filename,"r"); //   Check   To   See   If   The   File   Exists  
   
  if   (File) //   Does   The   File   Exist?  
  {  
  fclose(File); //   Close   The   Handle  
  return   auxDIBImageLoad(Filename); //   Load   The   Bitmap   And   Return   A   Pointer  
  }  
  return   NULL; //   If   Load   Failed   Return   NULL  
  }  
   
  int   LoadGLTextures() //   Load   Bitmaps   And   Convert   To   Textures  
  {  
  int   Status=FALSE; //   Status   Indicator  
   
  AUX_RGBImageRec   *TextureImage[1]; //   Create   Storage   Space   For   The   Texture  
   
  memset(TextureImage,0,sizeof(void   *)*1); //   Set   The   Pointer   To   NULL  
  //   Load   The   Bitmap,   Check   For   Errors,   If   Bitmap's   Not   Found   Quit  
  if   (TextureImage[0]=LoadBMP("Data/Crate.bmp"))  
  {  
  Status=TRUE; //   Set   The   Status   To   TRUE  
  glGenTextures(3,   &texture[0]); //   Create   Three   Textures  
   
  //   Create   Nearest   Filtered   Texture  
  glBindTexture(GL_TEXTURE_2D,   texture[0]);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);   //   (   NEW   )  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);   //   (   NEW   )  
  glTexImage2D(GL_TEXTURE_2D,   0,   3,   TextureImage[0]->sizeX,   TextureImage[0]->sizeY,   0,   GL_RGB,   GL_UNSIGNED_BYTE,   TextureImage[0]->data);  
   
   
  //   Create   Linear   Filtered   Texture  
  glBindTexture(GL_TEXTURE_2D,   texture[1]);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);  
  glTexImage2D(GL_TEXTURE_2D,   0,   3,   TextureImage[0]->sizeX,   TextureImage[0]->sizeY,   0,   GL_RGB,   GL_UNSIGNED_BYTE,   TextureImage[0]->data);  
   
  //   Create   MipMapped   Texture  
  glBindTexture(GL_TEXTURE_2D,   texture[2]);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);  
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);   //   (   NEW   )  
  gluBuild2DMipmaps(GL_TEXTURE_2D,   3,   TextureImage[0]->sizeX,   TextureImage[0]->sizeY,   GL_RGB,   GL_UNSIGNED_BYTE,   TextureImage[0]->data);   //   (   NEW   )  
  }  
   
  if   (TextureImage[0]) //   If   Texture   Exists  
  {  
  if   (TextureImage[0]->data) //   If   Texture   Image   Exists  
  {  
  free(TextureImage[0]->data); //   Free   The   Texture   Image   Memory  
  }  
   
  free(TextureImage[0]); //   Free   The   Image   Structure  
  }  
   
  return   Status; //   Return   The   Status  
  }  
  Top

相关问题

  • 你觉得这段程序会有内存泄漏吗?
  • 这段程序如何消除内存泄漏?
  • 请问那里有测试程序内存泄漏的工具
  • 请教:下面的程序居然也有内存泄漏!!!!!!
  • 请教高手...以下程序会否造成内存泄漏?
  • 请问这个程序是否存在内存泄漏?谢谢
  • 有什么好的办法寻找导致内存泄漏的程序段?
  • directdraw程序内存泄漏,咋回事?
  • 内存泄漏是怎么一回事?大虾们看看这段程序吧!给指点指点,^_^
  • 这段最简单的程序(显示BMP)存在内存泄漏,怎么解决?【在线给分】

关键词

  • 内存泄漏
  • null
  • textureimage
  • gl
  • texture
  • rgbimagerec
  • 程序
  • bitmap
  • 问题
  • filename

得分解答快速导航

  • 帖主:Johnal
  • xuguilin

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo