run-time check failure #3

zhaozilan_ly 2009-12-06 04:02:18
pBmpBits = NULL;//在构造函数中
///////
if(hMemDC)
{
pBmpBits = new UCHAR[bufsize];
}

::GetDIBits(hdc, hbitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_PAL_COLORS);
delete pBmpBits;
pBmpBits = NULL;

出错
run-time check failure #3 The variable ‘pBmpBits’ is being used without being defined.

奇怪的是运行一段时间后才出现错误,这是为什么啊,谢谢


...全文
408 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2009-12-06
  • 打赏
  • 举报
回复
对,delete []pBmpBits要放在if语句里,如果你没分配的话,delete会出错。
太乙 2009-12-06
  • 打赏
  • 举报
回复
if(hMemDC) ---这个判断是否一直都是true??
arong1234 2009-12-06
  • 打赏
  • 举报
回复
这个无所谓,对于简单类型,这个可以省略
正确的是:delete pBmpBits也必须放到if中去



if(hMemDC)
{
pBmpBits = new UCHAR[bufsize];
::GetDIBits(hdc, hbitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_PAL_COLORS);
delete pBmpBits;
pBmpBits = NULL
}




[Quote=引用 5 楼 beginnow 的回复:]
pBmpBits = new UCHAR[bufsize];
delete 是不是应该用delete[]啊
[/Quote]
beginnow 2009-12-06
  • 打赏
  • 举报
回复
pBmpBits = new UCHAR[bufsize];
delete 是不是应该用delete[]啊
kouwenlong 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhaozilan_ly 的回复:]
上面的代码写错了,是这样的,
pBmpBits = NULL;//在构造函数中
///////
if(hMemDC)
{
  pBmpBits = new UCHAR[bufsize];
}
::GetDIBits(hdc, hbitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_PAL_COLORS);


delete pBmpBits;
pBmpBits = NULL;

出错
run-time check failure #3  The variable ‘pBmpBits’ is being used without being defined.

奇怪的是运行一段时间后才出现错误,这是为什么啊,谢谢

[/Quote]
没看出来那里跟第一段代码不同。
zhaozilan_ly 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
pBmpBits 在hMemDC不为空时才初始化,而后面的函数则没有这个条件。那么当hMemDC为空时,你这个GetDIBits当然有问题
[/Quote]

上面的代码写错了,是这样的,
pBmpBits = NULL;//在构造函数中
///////
if(hMemDC)
{
pBmpBits = new UCHAR[bufsize];
::GetDIBits(hdc, hbitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_PAL_COLORS);
}



delete pBmpBits;
pBmpBits = NULL;

出错
run-time check failure #3 The variable ‘pBmpBits’ is being used without being defined.

奇怪的是运行一段时间后才出现错误,这是为什么啊,谢谢
zhaozilan_ly 2009-12-06
  • 打赏
  • 举报
回复
上面的代码写错了,是这样的,
pBmpBits = NULL;//在构造函数中
///////
if(hMemDC)
{
pBmpBits = new UCHAR[bufsize];
}
::GetDIBits(hdc, hbitmap, 0, bm.bmHeight, pBmpBits, binf,DIB_PAL_COLORS);


delete pBmpBits;
pBmpBits = NULL;

出错
run-time check failure #3 The variable ‘pBmpBits’ is being used without being defined.

奇怪的是运行一段时间后才出现错误,这是为什么啊,谢谢
arong1234 2009-12-06
  • 打赏
  • 举报
回复
pBmpBits 在hMemDC不为空时才初始化,而后面的函数则没有这个条件。那么当hMemDC为空时,你这个GetDIBits当然有问题

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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