MessageBox 未经处理的异常: 0xC0000005: 读取位置 0x00000010 时发生访问冲突

XieShuaiCn 2017-02-21 05:47:42
运行这个代码的时候,运行到MessageBox这一行时,报错,提示有未经处理的异常: 0xC0000005: 读取位置 0x00000010 时发生访问冲突。可是实在看不出问题了,我把hPerant,buffer, lpCaption都分别替换过,依旧有异常发生。

void ShowLastError(LPCTSTR lpCaption, HWND hParent/* = NULL*/)
{
TCHAR buffer[256];
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 255, NULL);
MessageBox(hParent, buffer, lpCaption, MB_OK);
}
...全文
679 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
XieShuaiCn 2017-05-22
  • 打赏
  • 举报
回复
谢谢大家,后来找到问题了,是因为其他函数在处理堆栈时产生的越界异常,直到运行这个函数时程序才报错。所以问题在之前运行的一个函数中,并不在此
zgl7903 2017-02-23
  • 打赏
  • 举报
回复
TCHAR buffer[256] = {0}; 如果没有获取到错误信息 可能因没有结束符而导致越界访问
Pingo520 2017-02-23
  • 打赏
  • 举报
回复
你确定256的bufer能接收完所有的出错信息吗?你指定的255是只分配给接收缓冲区的最小数,如果出错信息的大小超过了256,你buf就接不完,会越界的。越界自然就是访问出错
oyljerry 2017-02-22
  • 打赏
  • 举报
回复
查看一下出错的时候,函数调用堆栈,然后看你上面的调用代码等是哪里有问题。
赵4老师 2017-02-22
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
schlafenhamster 2017-02-21
  • 打赏
  • 举报
回复
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, // ignored, search the system only ntError, // error code passed in GetSystemDefaultLangID(),// English ,English US errorMsg, // message buffer sizeof(errorMsg), // length NULL); // optional parameter list
ccrun.com 2017-02-21
  • 打赏
  • 举报
回复
未必是这里的问题。单步跑一下,确定到底是哪一行弹出异常。
XieShuaiCn 2017-02-21
  • 打赏
  • 举报
回复
void ShowLastError(LPCTSTR lpCaption, HWND hParent/* = NULL*/) { TCHAR buffer[256]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, buffer, 255, NULL); MessageBox(NULL, _T("123"), _T("123"), MB_OK); } 改成这个样子了,依旧提示错误

15,471

社区成员

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

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