c – 绘画时内存泄漏
发布时间:2020-12-16 10:18:20 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个简单的游戏,但我找不到某个内存泄漏.每隔一秒左右,该程序似乎使用3mb以上的内存. 问题在于这种绘制方法.如果我不称这种方法,一切正常.我正在尝试在屏幕的几个部分上绘制一个精灵: void Map::draw(HDC hBackBufferDC) { for(int i = 0; i
我正在尝试创建一个简单的游戏,但我找不到某个内存泄漏.每隔一秒左右,该程序似乎使用3mb以上的内存.
问题在于这种绘制方法.如果我不称这种方法,一切正常.我正在尝试在屏幕的几个部分上绘制一个精灵: void Map::draw(HDC hBackBufferDC) { for(int i = 0; i < 24; i++) { for(int j = 0; j < 27; j++) { if(mapState[i][j] == 'm') { blueWall->draw(hBackBufferDC,new Position(j,i)); } } } } 如果我删除了draw的方法调用,则没有问题,所以问题在于该方法: void StaticSprite::draw(HDC hBackBufferDC,Position* pos) { int x = (int)pos->x * 22; int y = (int)pos->y * 22; HGDIOBJ oldObj = SelectObject(this->hSpriteDC,this->hMask); BitBlt(hBackBufferDC,x,y,22,this->hSpriteDC,SRCAND); SelectObject(this->hSpriteDC,this->hImage); BitBlt(hBackBufferDC,SRCPAINT); SelectObject(this->hSpriteDC,oldObj); } 知道是什么导致内存泄漏吗?我认为这与此部分有关,但如果需要,我可以发布代码的其他部分. 谢谢 解决方法
你是否使用托管c?
您正在分配新职位(24 * 27)次. 每次调用Map :: draw时,这会导致648泄漏. 使用自动对象. void Map::draw(HDC hBackBufferDC) { for(int i = 0; i < 24; i++) { for(int j = 0; j < 27; j++) { if(mapState[i][j] == 'm') { Position tmp(j,i); blueWall->draw(hBackBufferDC,&tmp); } } } } } 或者在使用后删除Position对象! void Map::draw(HDC hBackBufferDC) { for(int i = 0; i < 24; i++) { for(int j = 0; j < 27; j++) { if(mapState[i][j] == 'm') { Position *tmp = new Position(j,tmp); delete tmp; } } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |