首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

菜鸟自己写了个俄罗斯方块,不过在内存方面有很大bug~

2012-03-29 
初学者自己写了个俄罗斯方块,不过在内存方面有很大bug~~~~~#includestdafx.h #includeiostream#define

初学者自己写了个俄罗斯方块,不过在内存方面有很大bug~~~~~
#include   "stdafx.h "
#include   <iostream>

#define   BOTTOM   30
#define   RIGHT   20


HINSTANCE   hInst;
int   coor[BOTTOM+1][RIGHT+1]={0},now,score=0,speed=500,b[8];
HPEN   hPen,hClearPen;
HDC   hdc;
char   scoretext[10];

struct   C
{
public:
int   x,y;
};
class   Blocks
{
public:
  int   style,centerx,centery;
struct   C   construct[4];


void   set(int   *con,int   s)
{
style=s;
for(i=0;i <4;i++)
{
construct[i].x=con[i*2];
construct[i].y=con[i*2+1];
}
}

virtual   void   centerSet(int   cx,int   cy)
{

}

int   reachTop()
{
for(i=0;i <4;i++)
{
if(construct[i].y <=0)
return   1;
else   return   0;
}
}
int   reachBottom()
{
for(i=0;i <4;i++)
{
if(construct[i].y==(BOTTOM-1)||(coor[construct[i].y+1][construct[i].x]==1))
return   1;
}
return   0;
}
int   reachLeft()
{
for(i=0;i <4;i++)
{
if(construct[i].x <=0||(coor[construct[i].y][construct[i].x-1]==1))
return   1;
}
return   0;

}
int   reachRight()
{
for(i=0;i <4;i++)
{
if(construct[i].x> =RIGHT||(coor[construct[i].y][construct[i].x+1]==1))
return   1;
}
return   0;
}
int   leftMove()
{
for(i=0;i <4;i++)
{
if(reachLeft())
return   0;
}
for(i=0;i <4;i++)
{
construct[i].x--;
}
centerx--;
return   1;
}
int   rightMove()
{
for(i=0;i <4;i++)
{
if(reachRight())
return   0;
}
for(i=0;i <4;i++)
{
construct[i].x++;
}
centerx++;
return   1;
}
int   downMove()
{
if(reachBottom())
{
for(int   k=0;k <4;k++)
coor[construct[k].y][construct[k].x]=1;
return   0;
}
for(i=0;i <4;i++)
{
construct[i].y++;
}
centery++;
return   1;
}
int   canChange()
{
for(i=0;i <4;i++)
{
if(construct[i].x <0||construct[i].x> RIGHT)
return   0;
}
return   1;
}
private:
int   i;
};


[解决办法]
hPen = CreatePen(PS_SOLID,5,RGB(255,0,0));
hClearPen=CreatePen(PS_SOLID,3,RGB(255,255,255));
hdc = GetDC(hWnd);
类似的这些变量都要在退出作用域的时候relase掉

关于hdc建议不要用delete释放,我以前试过,会出现警告的
[解决办法]
局部变量,局部释放
[解决办法]
“hPen = CreatePen(PS_SOLID,5,RGB(255,0,0));
hClearPen=CreatePen(PS_SOLID,3,RGB(255,255,255));
hdc = GetDC(hWnd);
类似的这些变量都要在退出作用域的时候relase掉”

这两个都是整个程序都用的着的东西啊,我把它们定义为全局变量了啊。
希望高手能给我个明确的答复,或者提供一些有关的内存管理的东西,谢谢了

在你使用这个变量暂时结束时,就应该释放,
比如你这个方块.每下一个使用一次,当下完当前的就要释放以备下一个方块使用.


delete的只能是指针变量.
例如: int *a = new int;
...............


delete a;
a = NULL;
使用完后一定要手动释放资源,为防止野指针还要将释放的部分置为NULL
[解决办法]
我经常用的变量都是设置为全局变量,可是为什么占用的内存还会越来越多呢??实在是很疑惑。希望能给个详细解答或者举个例子,小弟十分感谢
=======================================================
CPen *p;
void load()
{
p = ................
操作
p-> deleteObject();//局部释放
p = NULL;
}

void load2()
{
p = ................
操作
p-> deleteObject();//局部释放
p = NULL;
}

int main()
{
load1();
load2();
}
这样就可以保证内存不会不正常的增长了
明白我的意思了吗???
一次使用一次释放
不过注意:不能用 delete p;
原因不知道,我做的时候这样就会出错.
最后还要把p的指针设为空,防止内存泄露.
[解决办法]
PostQuitMessage(0); ReleaseDC (hWnd, hdc) ;
====================================
我感觉应该先ReleaseDC再PostQuitMessage
先释放资源,再退出程序
[解决办法]
呵呵,以前我也试过这样,不过就不是程序抛锚,而是界面上的显示开始变得很诡异~~~- -!
[解决办法]
太晚了。楼主是等代码都写完了才发现问题?或者是发现了问题还是硬着头皮写完再说?

热点排行