进程中的函数有什么要求

seraphim1025 2008-04-05 08:49:41
我在进程中写了一个抓图的函数,如下
CDC pDC;
pDC.CreateDC("DISPLAY", NULL, NULL, NULL);
CDC memDC; //定义一个兼容DC;
memDC.CreateCompatibleDC(&pDC);
CBitmap m_pBitMap;
CBitmap *m_pOldBitmap;
m_pBitMap.CreateCompatibleBitmap(&pDC,m_rect.Width(),m_rect.Height());
m_pOldBitmap = memDC.SelectObject(&m_pBitMap);

memDC.BitBlt(0, 0, m_rect.Width(), m_rect.Height(), &pDC, m_rect.left, m_rect.top, SRCCOPY);

memDC.SelectObject(m_pOldBitmap);
///////////////////////////////////

BITMAP btm;
m_pBitMap.GetBitmap(&btm);
DWORD size = btm.bmWidthBytes * btm.bmHeight;
LPSTR lpData=(LPSTR)GlobalAllocPtr(GPTR,size);
现在的问题是编译能通过,可是在调试的时候m_pBitMap.GetBitmap(&btm); 出现错误。请问大侠们这是为什么。谢谢!!!!
...全文
347 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
scq2099yt 2008-04-05
  • 打赏
  • 举报
回复
内存泄漏单步调试
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
我是初学者,内存泄漏,谁能告诉我怎样解决,谢谢!!!
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
另外还有
Detected memory leaks!
Dumping objects ->
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {145} normal block at 0x003AA578, 21 bytes long.
Data: < >x > EC 97 3E 78 04 00 00 00 04 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {124} normal block at 0x003A8060, 23 bytes long.
Data: < >x > EC 97 3E 78 06 00 00 00 06 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {102} normal block at 0x003A81E0, 21 bytes long.
Data: < >x > EC 97 3E 78 04 00 00 00 04 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {101} normal block at 0x003A8190, 20 bytes long.
Data: < >x > EC 97 3E 78 03 00 00 00 03 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {100} normal block at 0x003A8140, 20 bytes long.
Data: < >x > EC 97 3E 78 03 00 00 00 03 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\barcore.cpp(156) : {96} normal block at 0x003A7EE0, 80 bytes long.
Data: < > 00 00 00 00 00 01 00 00 00 01 00 08 00 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {95} normal block at 0x003A7E28, 124 bytes long.
Data: < u: > 00 00 00 00 00 00 00 00 00 00 00 00 D0 75 3A 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {94} normal block at 0x003A7D70, 124 bytes long.
Data: < |: > 00 00 00 00 00 00 00 00 00 00 00 00 D8 7C 3A 00
i:\visual studio 2005\getpixel\cutscreen\cutscreenview.cpp(22) : {93} client block at 0x003A7CD8, subtype c0, 92 bytes long.
a CCutScreenView object at $003A7CD8, 92 bytes long
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {88} normal block at 0x003A7860, 26 bytes long.
Data: < >x > EC 97 3E 78 09 00 00 00 09 00 00 00 01 00 00 00
i:\visual studio 2005\getpixel\cutscreen\mainfrm.cpp(45) : {85} client block at 0x003A76A8, subtype c0, 148 bytes long.
a CSplash object at $003A76A8, 148 bytes long
i:\visual studio 2005\getpixel\cutscreen\mainfrm.cpp(19) : {84} client block at 0x003A74F8, subtype c0, 372 bytes long.
a CMainFrame object at $003A74F8, 372 bytes long
i:\visual studio 2005\getpixel\cutscreen\cutscreendoc.cpp(17) : {83} client block at 0x003A7430, subtype c0, 140 bytes long.
a CCutScreenDoc object at $003A7430, 140 bytes long
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\plex.cpp(29) : {82} normal block at 0x003A7378, 124 bytes long.
Data: < q: > 00 00 00 00 00 00 00 00 00 00 00 00 E0 71 3A 00
{81} client block at 0x003A7318, subtype c0, 32 bytes long.
a CDocManager object at $003A7318, 32 bytes long
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {80} normal block at 0x003A7288, 77 bytes long.
Data: < >x< < > EC 97 3E 78 3C 00 00 00 3C 00 00 00 01 00 00 00
i:\visual studio 2005\getpixel\cutscreen\cutscreen.cpp(75) : {79} client block at 0x003A71E0, subtype c0, 108 bytes long.
a CSingleDocTemplate object at $003A71E0, 108 bytes long
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {77} normal block at 0x003A7188, 23 bytes long.
Data: < >x > EC 97 3E 78 06 00 00 00 06 00 00 00 01 00 00 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {76} normal block at 0x003A7128, 33 bytes long.
Data: < >x > EC 97 3E 78 10 00 00 00 10 00 00 00 01 00 00 00
{75} normal block at 0x003A70D8, 20 bytes long.
Data: < >x >x >x> 04 00 00 00 00 98 3E 78 00 98 3E 78 00 98 3E 78
{74} normal block at 0x003A7078, 32 bytes long.
Data: <$R x p: 8q: > 24 52 1E 78 04 00 00 00 DC 70 3A 00 38 71 3A 00
f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\oleinit.cpp(84) : {71} client block at 0x003A6F98, subtype c0, 68 bytes long.
a CCmdTarget object at $003A6F98, 68 bytes long
Object dump complete.
线程 'Win32 线程' (0xbe0) 已退出,返回值为 3 (0x3)。
程序“[2536] CutScreen.exe: 本机”已退出,返回值为 3 (0x3)。
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
“CutScreen.exe”: 已加载“I:\Visual Studio 2005\GetPixel\debug\CutScreen.exe”,已加载符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugMFC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_c8452471\mfc80d.dll”,已加载符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll”,已加载符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\gdi32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\user32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\shlwapi.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\comctl32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\oleaut32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\ole32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\imm32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\lpk.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\usp10.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFCLOC_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_3415f6d0\mfc80CHS.dll”,未使用调试信息生成二进制文件。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\uxtheme.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\MSCTF.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\version.dll”,未加载任何符号。
“CutScreen.exe”: 已卸载“C:\WINDOWS\system32\version.dll”
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\MSCTFIME.IME”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\unispim6.ime”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.2600.2180_x-ww_522f9f82\GdiPlus.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\shell32.dll”,未加载任何符号。
“CutScreen.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll”,未加载任何符号。
线程 'Win32 线程' (0x460) 已退出,返回值为 0 (0x0)。
“CutScreen.exe”: 已加载“C:\WINDOWS\system32\mslbui.dll”,未加载任何符号。
CutScreen.exe 中的 0x00419378 处最可能的异常: 0xC0000005: 读取位置 0x4365335e 时发生访问冲突
CutScreen.exe 中的 0x00419378 处未处理的异常: 0xC0000005: 读取位置 0x4365335e 时发生访问冲突
程序“[3672] CutScreen.exe: 本机”已退出,返回值为 0 (0x0)。
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
忽略后出现下面的冲突 在使用btm.bmWidth时
CutScreen.exe 中的 0x00419378 处最可能的异常: 0xC0000005: 读取位置 0x4365335e 时发生访问冲突
CutScreen.exe 中的 0x00419378 处未处理的异常: 0xC0000005: 读取位置 0x4365335e 时发生访问冲突
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
忽略后图像调用冲突的提示
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
Debug assertion failed

Treazy 2008-04-05
  • 打赏
  • 举报
回复
出现什么错误!
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
谢谢 arong1234
我刚刚学VC++,谢谢你的宝贵建议。
arong1234 2008-04-05
  • 打赏
  • 举报
回复
你的内存泄漏和这段代码貌似无关,你双击错误信息应该能带你到分配这个内存的地方
至于你的debug error,一般会告诉你assert是在哪个文件哪行发生的,看看是不是可以估计出错原因
你代码的问题是安全性检查太少,总是假定每步都成功,但是这种假定是步成立的(你没有检查过任何一个返回值)
arong1234 2008-04-05
  • 打赏
  • 举报
回复
编程没有那么简单,能有个高手告诉你一个步骤,你就可以用来解决问题了。如果真那么简单,为什么就象微软这样的牛X公司都有hotfix,所以不要对问问题期望太高,指望一击即中,你也可以高枕无忧了。调试是需要很多经验和技巧的,也是需要非常强的耐心的。不是一蹴而就的。
我曾经为了一个bug花了半年时间,想想这不是很容易吧?
arong1234 2008-04-05
  • 打赏
  • 举报
回复
不要只想着问怎么解决,你原因还没有,怎么去解决
内存泄漏自然需要你按照10楼说的去找看看哪个变量没释放
[Quote=引用 9 楼 seraphim1025 的回复:]
怎样解决这个问题
[/Quote]
Eleven 2008-04-05
  • 打赏
  • 举报
回复
看看是哪里用了new ,没有使用delete释放!
seraphim1025 2008-04-05
  • 打赏
  • 举报
回复
怎样解决这个问题
本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库, PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威, 概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数

19,469

社区成员

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

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