0xC015000F: 正被停用的激活上下文不是最近激活的。

本文详细阐述了一个在对话框退出时访问已销毁资源导致的错误问题,通过修改代码避免了访问未初始化资源的问题。讨论了资源管理的重要性及在对话框生命周期中的正确实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,见到了这个错误,vc调试发现在堆栈中看不出什么问题,堆栈定位到了这里

void AFXAPI AfxUnlockGlobals(int nLockType)
{
ASSERT(_afxCriticalInit);
ENSURE((UINT)nLockType < CRIT_MAX);


// unlock specific resource
ASSERT(_afxLockInit[nLockType]);
#ifdef _DEBUG
ASSERT(--_afxResourceLocked[nLockType] >= 0);
#endif
LeaveCriticalSection(&_afxResourceLock[nLockType]);
}

莫名其妙啊,在网上查下,说是访问或删除了销毁的资源或指针,经检查发现一个低级错误

如下,见红色代码:

void XXXDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
CRect rc0,rc1;
GetClientRect(rc0);
GetWindowRect(rc1);
CRect brc;
GetDlgItem(IDCANCEL)->GetClientRect(brc);
if (m_playWin.GetSafeHwnd())
{

... ...
}
}

改为:

void XXXDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);


CRect rc0,rc1;
GetClientRect(rc0);
GetWindowRect(rc1);
CRect brc;
if (m_playWin.GetSafeHwnd())
{
GetDlgItem(IDCANCEL)->GetClientRect(brc);
}

}

果真是访问了未初始化资源造成的,但在对话框使用的过程中不出错,只有在对话框退出时报出了错误。

按照错误的方法使用其他资源时,会明显提示使用了非法窗口,我想类似“IDCANCEL”“IDOK”可能是做了特殊处理吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值