回 帖 发 新 帖 刷新版面

主题:求急:在虾们帮忙,出现内存泄露了!

我写了一个小游戏,但是在运行多次后就出现了内存不足的对话框。我多次执行以下代码时,并用windows的任务管器/性能看着内PF使用率直线上升。我想可能问题出在这段代码上。请各们大虾们帮我看看哪有的内存“有借无还”了?
void TMainForm::InitGame()
{
CmpThinking=false;
GameOver=false;
Cmp.MoveFirst=false;
N_Cmp_First->Enabled=true;
//-------------------------界面初始化----------------------------------------- //我想问题就可能出在这。
int i,j;
int b[4][4]={{1,1,1,1},{1,0,0,1},{2,0,0,2},{2,2,2,2}};
for(i=0;i<4;i++)//------------------------------------------------------
for(j=0;j<4;j++)//struct S_cb{TImage *Image; enum EState State}cb[4][4];
switch(b[i][j])//Graphics::TBitmapt *btm_cbt,*btm_pbt;*btm_Psct;并且只
   {            //初始化了一次  
    case 1:
     cb[i][j].Image->Picture->Bitmap=btm_Cbt;
     cb[i][j].State=COccupy;
     break;
     case 2:
         cb[i][j].Image->Picture->Bitmap=btm_Pbt;
         cb[i][j].State=POccupy;
        break;
       default:
        cb[i][j].Image->Picture=NULL;
         cb[i][j].State=NOccupy;
    }
}//end InitGame()definition

回复列表 (共6个回复)

沙发

是不是应为你的图形空间在程序退出时没有释放啊?

板凳

我也认为是无用的位图资源没有释放。
给Picture属性赋值建议使用Assign函数。
如:Images->Picture->Assign(TBitmap *);

3 楼

但是我赋值用的是指针啊,在每次赋值的时候并没有申请新的空间。当然就不用手动回收空间了,不然就会把:Graphics::TBitmapt *btm_cbt,*btm_pbt;*btm_Psct;的内存绘回收掉,在下次调用这个函数是就会了错了。这显然是不愿发生。
我过我想试试yaopo的方法。可能有效果。

4 楼

内存使用快速增加,不一定是泄漏。从程序上来看,Bitmap对象指针定义了,但没有初始化

5 楼

感谢大家的帮助。我的问题解决了。原来是在Form1->OnPaint()事件中有一个TBitmap的对像没有正确释放内存。而OnPaint事件却快速执行。所以就出现了“快速的内存泄漏”。
再次谢谢大家的帮助。

6 楼

可以打开project->setting-> code guard,那么出现类似问题时就会提示了的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册