CRITICAL_SECTION定义为类成员发生奇怪错误,求指点~~

韩楚风
数据库领域优质创作者
博客专家认证
2011-12-22 03:36:46
//CCHThreadControl.h文件
class CCHThreadControl
{
public:
CCHThreadControl();
virtual ~CCHThreadControl();
protected:
private:
CRITICAL_SECTION m_CriticalSection;
};

//CCHThreadControl.cpp文件
CCHThreadControl::CCHThreadControl()
{
}

CCHThreadControl::~CCHThreadControl()
{
}


//在main.cpp文件中
#include "Headfiles.h"

CCHThreadControl g_ThreadControl;

int main(int argc,char *argv[])
{
return 0;
}


运行以上程序会发生如下错误
ChatThreadPool.exe 中的 0x770fef00 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefef6 时发生访问冲突

中断停在
#ifdef _M_CEE
System::Threading::Thread::BeginThreadAffinity();
#endif
EnterCriticalSection(_Mtx);
}

求高手指教原因~~
...全文
345 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主,您好,请问您这个问题解决了么?我现在遇见相同的问题了,请赐教,谢谢。
gg606 2012-01-14
  • 打赏
  • 举报
回复
_Mtx 是一个地址吗?
Kylin_Bird_Lee 2012-01-13
  • 打赏
  • 举报
回复
关注,同出错!!!

iocp.exe 中的 0x777b9b3c 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefef6 时发生访问冲突


::EnterCriticalSection(&m_FreeContextListLock);

if(m_nFreeContextCount <= m_nMaxFreeContexts) // 添加到空闲列表
{
// 先将关键代码段变量保存到一个临时变量中
CRITICAL_SECTION cstmp = pContext->Lock;
// 将要释放的上下文对象初始化为0
memset(pContext, 0, sizeof(CIOCPContext));

// 再放会关键代码段变量,将要释放的上下文对象添加到空闲列表的表头
pContext->Lock = cstmp;
pContext->pNext = m_pFreeContextList;
m_pFreeContextList = pContext;

// 更新计数
m_nFreeContextCount ++;
}
else
{
->>出错位置 ::DeleteCriticalSection(&pContext->Lock);
::HeapFree(::GetProcessHeap(), 0, pContext);
}

::LeaveCriticalSection(&m_FreeContextListLock);


pContext->Lock调试出来的信息表明该地址与刚释放的pContext->lock相同

我就不明白这指针怎么会指向刚被释放的区域去了

韩楚风 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]

你这是什么类型的程序
[/Quote]用的vc2010,选的是c0ns0le
韩楚风 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]

你这是什么类型的程序
[/Quote]用的vc2010,选的是c0ns0le
韩楚风 2011-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lactoferrin 的回复:]

你这是什么类型的程序
[/Quote]用的vc2010,选的是c0ns0le
韩楚风 2011-12-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lactoferrin 的回复:]
CCHThreadControl::CCHThreadControl()
{
InitializeCriticalSection(&m_CriticalSection);
}
CCHThreadControl::~CCHThreadControl()
{
DeleteCriticalSection(&m_CriticalSection);
}
[/Quote]

这样还是报错的,试过的,我也纳闷啊
Lactoferrin 2011-12-25
  • 打赏
  • 举报
回复
你这是什么类型的程序
龙行天下之Sky 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lactoferrin 的回复:]

CCHThreadControl::CCHThreadControl()
{
InitializeCriticalSection(&m_CriticalSection);
}
CCHThreadControl::~CCHThreadControl()
{
DeleteCriticalSection(&m_CriticalSection);
}
[/Quote]
可以定义成成员变量的,不用担心的
xiaoguailong3 2011-12-22
  • 打赏
  • 举报
回复
没初始化InitializeCriticalSection
Lactoferrin 2011-12-22
  • 打赏
  • 举报
回复
CCHThreadControl::CCHThreadControl()
{
InitializeCriticalSection(&m_CriticalSection);
}
CCHThreadControl::~CCHThreadControl()
{
DeleteCriticalSection(&m_CriticalSection);
}
kyotrue 2011-12-22
  • 打赏
  • 举报
回复
很简单,用之前要初始化。。。
全局变量默认初始化为0的,当然不会出错了。
韩楚风 2011-12-22
  • 打赏
  • 举报
回复
初始化了也不行,在程序退出时还是会发生一样的错误。
如果CRITICAL_SECTION m_CriticalSection;定义成全局变量,不初始化都不会出错,在想是不是不能定义成类成员,郁闷。。。

mayudong1 2011-12-22
  • 打赏
  • 举报
回复
CRITICAL_SECTION m_CriticalSection;


它需要初始化的,不知道在使用之前有没有在哪个函数中对它做初始化的处理

15,471

社区成员

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

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