帮忙看看这段程序吧

karonbf 2004-09-24 07:46:28
帮忙看看出了什么问题~~~~为什么我每秒执行一次~~~~然后用任务管理器查看~~~~~发现内存占用以每秒4K直线上升~~~~~
void draw(int long,int width,int time,int modify,int modify1,int modify2,Color color,Color color1)
{
double ang,n;
PointF temp_point,temp_point1;
PointF Poly_point[5]; //保存图形顶点数组
ang = time; //时间
n=modify; //秒针位置修正值
ang = ang/60*PI*2 - PI/2 + n/modify1*PI/modify2; //转成弧度

//跟据时间~~计算各顶点的位置
temp_point.X = (float)((long-5)*cos(ang) + 100);
temp_point.Y = (float)((long-5)*sin(ang) + 100);
temp_point1.X = (float)(20*cos(ang+PI) + 100);
temp_point1.Y = (float)(20*sin(ang+PI) + 100);

Poly_point[0].X = (float)(width*cos(ang+PI/2*3) + temp_point1.X);
Poly_point[0].Y = (float)(width*sin(ang+PI/2*3) + temp_point1.Y);
Poly_point[1].X = (float)(width*cos(ang+PI/2) + temp_point1.X);
Poly_point[1].Y = (float)(width*sin(ang+PI/2) + temp_point1.Y);
Poly_point[2].X = (float)(width*cos(ang+PI/2) + temp_point.X);
Poly_point[2].Y = (float)(width*sin(ang+PI/2) + temp_point.Y);
Poly_point[4].X = (float)(width*cos(ang+PI/2*3) + temp_point.X);
Poly_point[4].Y = (float)(width*sin(ang+PI/2*3) + temp_point.Y);
Poly_point[3].X = (float)(radius*cos(ang) + 100);
Poly_point[3].Y = (float)(radius*sin(ang) + 100);
pGraphics->FillPolygon(new SolidBrush(color1),Poly_point,5);
pGraphics->DrawPolygon(new Pen(color),Poly_point,5);
}
...全文
103 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
longki 2004-09-27
  • 打赏
  • 举报
回复

强~
crgxw 2004-09-27
  • 打赏
  • 举报
回复
差不多吧,

因为new是动态分配内存的,只要有new一定要有delete

karonbf 2004-09-25
  • 打赏
  • 举报
回复
哪几个结构没说清楚啊~~~~~~

我是这样NEW的
hdc = GetDC(hWnd);
pGraphics = new Graphics(hdc);

我试过删掉这两句,问题就没有了
pGraphics->FillPolygon(new SolidBrush(color1),Poly_point,5);
pGraphics->DrawPolygon(new Pen(color),Poly_point,5);
crgxw 2004-09-25
  • 打赏
  • 举报
回复
pGraphics = new Graphics(hdc);


在用完了这个后一定要析构内存

delete pGraphics ;
karonbf 2004-09-25
  • 打赏
  • 举报
回复
问题解决了~~~~谢谢~~~~~~~

顺便问一下~~~~~在函数里创建的变量~~~~~不是会在退出函数时自动释放的吗????

如果我这样定义
SolidBrush m_BrushTemp(color1);

pGraphics->FillPolygon(m_BrushTemp, Poly_point,5);

这样还要不要
delete m_BrushTemp呢????

如果要~~应该怎要DELETE~~~~~我想如果就这样DELETE的话会出错~~~因为m_BrushTemp不是指针~~~我这样想对吗????
crgxw 2004-09-25
  • 打赏
  • 举报
回复
我试过删掉这两句,问题就没有了
pGraphics->FillPolygon(new SolidBrush(color1),Poly_point,5);
pGraphics->DrawPolygon(new Pen(color),Poly_point,5);

出错原因为
FillPolygon(new SolidBrush(color1),Poly_point,5);和
DrawPolygon(new Pen(color),Poly_point,5);

new 的地方不对,因为你在这个地方动态分配没有析构应改为
SolidBrush *m_pBrushTemp = new SolidBrush(color1);
Pen m_pPenTemp = new Pen(color);

FillPolygon(m_pBrushTemp ,Poly_point,5);和
DrawPolygon(m_pPenTemp ,Poly_point,5);

delete m_pBrushTemp ;
delete m_pPenTemp ;



KiGhost 2004-09-24
  • 打赏
  • 举报
回复
程序中有几个结构没说清楚......还有......你确定是在这里出的问题吗?


我怀疑是不是

pGraphics->FillPolygon(new SolidBrush(color1),Poly_point,5);
中的New出的问题?
karonbf 2004-09-24
  • 打赏
  • 举报
回复
没有啊~~~~~我没有用位图~~~~都是自己画的~~~~
crgxw 2004-09-24
  • 打赏
  • 举报
回复
你可能用双缓冲做的,你可能用设备环境择拉位图而每释放,如
CBitmap *m_pOld = NULL;
pDC ->SelectObject(&m_Bitmap)

...........
pDC ->SelectObject(m_pOld)//你可能没写这句话
crgxw 2004-09-24
  • 打赏
  • 举报
回复
你可能用双缓冲做的,你可能用设备环境择拉位图而每释放,如
CBitmap *m_pOld = NULL;
pDC ->SelectObject(&m_Bitmap)

...........
pDC ->SelectObject(m_pOld)//你可能每写这句话

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧