【求救】未处理的异常:0xC0000005:读取位置0xfeeefeee时发生访问冲突

quandaxia 2009-07-14 09:54:44
小弟做的简单的说就是一个对话框加上打印功能,vc2008下debug没问题,也可以运行,但release编译是没问题,运行就出错,错误提示是"xxx.exe 中的 0x0041a9ce 处未处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突"。

下面是部分代码:
int CConstantTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: 在此添加您专用的创建代码
CChildFrame* pFrame = new CChildFrame;
m_pChildFrame = pFrame;

// create and load the frame with its resources
pFrame->LoadFrame(IDR_PRINTFRAME,WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU,NULL,NULL); m_pChildFrame->SetWindowText(_T("打印报表")); //程序就停在这里
m_pChildFrame->SetIcon(m_hIcon, FALSE);
m_pChildFrame->ShowWindow(SW_HIDE);

m_pChildFrame->UpdateWindow();
return 0;
}

局部变量里面可以看到“CChildFrame hWnd=0xfeeefeee”,知道是这个地方有问题,但是不明白,为什么release下就会错,各位小哥帮忙看看,我可以再加分的,谢谢!
...全文
2650 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyfeng2008 2009-11-28
  • 打赏
  • 举报
回复
有需要Tracer工具的朋友请email:hynoo.tech@gmail.com
yyfeng2008 2009-11-28
  • 打赏
  • 举报
回复
推荐一个调试工具Tracer给大家,它是一个用于在Release后运行于真实环境下的应用软件的调试工具(当然也可调试Debug版本的)而无需VC++环境,它可以捕获应用软件的TRACE输出信息进行跟踪显示,同时还能对应用软件在运行时出现的异常崩溃进行源码级的定位,非常方便程序员快速定位并解决应用软件开发中的深度BUG。
quandaxia 2009-07-27
  • 打赏
  • 举报
回复
很奇怪的现象...在另一个程序当中,一样的语句,这回换成Debug下面不行了..还是同样的问题..确实是LoadFrame()有问题,但是不知道怎么解决...

先结帖,回头慢慢研究...
oyljerry 2009-07-14
  • 打赏
  • 举报
回复
你的pFrame->LoadFrame() 语句有问题,调试一下
Eleven 2009-07-14
  • 打赏
  • 举报
回复
你调试call stack看看是哪个函数调用出错。
快乐鹦鹉 2009-07-14
  • 打赏
  • 举报
回复
我知道是这里最终出错。但根源不在这里啊。问题在于前面一句LoadFrame并没有成功,因此pFrame并没有生成m_hWnd,才导致这里的失败。明白么。
quandaxia 2009-07-14
  • 打赏
  • 举报
回复
谢谢鹦鹉哥。。。
刚刚没说清楚,调试到了winocc.cpp的这个部分错误
void CWnd::SetWindowText(LPCTSTR lpszString)
{
ENSURE(this);
ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

if (m_pCtrlSite == NULL)
::SetWindowText(m_hWnd, lpszString);
else
m_pCtrlSite->SetWindowText(lpszString); //最后停在这里
}
可以看得出来是m_pChildFrame->SetWindowText(_T("打印报表"))这里错了。。
这个时候CChildFrame hWnd=0xfeeefeee,是pFrame。
fengrx 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fengrx 的回复:]
SetWindowText是在窗口存在时才可以,而楼主的代码刚new CChildFrame,虽然类对象存在了,但窗口还有初始化,窗口还没有,所以不可以的。
[/Quote]

不好意思,看错了,
fengrx 2009-07-14
  • 打赏
  • 举报
回复
SetWindowText是在窗口存在时才可以,而楼主的代码刚new CChildFrame,虽然类对象存在了,但窗口还有初始化,窗口还没有,所以不可以的。
快乐鹦鹉 2009-07-14
  • 打赏
  • 举报
回复
LoadFrame失败了。看一下返回值,检查一下LastError,调试到LoadFrame中,看那句不行。一般可能是变量未初始化,或者消息机制不对等
快乐鹦鹉 2009-07-14
  • 打赏
  • 举报
回复
pFrame->LoadFrame(IDR_PRINTFRAME,WS_OVERLAPPED|WS_MINIMIZEBOX|WS_SYSMENU,NULL,NULL);
==应该是这里面有问题吧。

局部变量里面可以看到“CChildFrame hWnd=0xfeeefeee”,
==这个你是指pFrame呢,还是m_pChildFrame呢?

16,551

社区成员

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

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

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