为什么会造成Debug Error的错误?

jiaowenhao 2006-10-19 08:23:42
我在才单项中加入以下代码,当运行两次后就会产生Debug Error的错误,错误出现在内存分配上,可是我已经释放内存空间了
//位图的马赛克效果
int nTileSize = 5; //小方块的大小
LONG lTileNum; //小方块的数量
int nrw = 0;
int nrh = 0;

pDC = GetDC();
ClearBitmap();
MemDC.CreateCompatibleDC(pDC);
pOldBitmap = (CBitmap*) MemDC.SelectObject(&Bitmap);

if((bm.bmWidth % nTileSize) != 0)
nrw = 1;
if((bm.bmHeight % nTileSize) != 0)
nrh = 1;
lTileNum = (bm.bmWidth / nTileSize + nrw) * (bm.bmHeight / nTileSize + nrh);

//给纪录小方块左上角坐标的POINTS结构数据分配内存
POINT *pt = new POINT[lTileNum];

//初始化数组
LONG mx = 0;
LONG my = 0;
for(LONG mi = 0; mi < lTileNum; mi++)
{
pt[mi].x = mx;
pt[mi].y = my;
mx += nTileSize;
if(mx > bm.bmWidth)
{
mx = 0;
my += nTileSize;
}
}

//开始随机显示小方块
double fMax = RAND_MAX;
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
for(mi = lTileNum-1; mi > 0; mi--)
{
int n = (int)((double) lTileNum * rand() / fMax);
mx = pt[n].x;
my = pt[n].y;

pDC->BitBlt(mx, my, nTileSize, nTileSize, &MemDC, mx, my, SRCCOPY);
pt[n].x = pt[mi].x;
pt[n].y = pt[mi].y;

}

delete []pt;

MemDC.SelectObject(pOldBitmap);
MemDC.DeleteDC();
...全文
2697 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaowenhao 2006-10-19
  • 打赏
  • 举报
回复
脆弱的肠胃 2006-10-19
  • 打赏
  • 举报
回复
up

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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