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

解决方案 »

  1.   

    初始化了也不行,在程序退出时还是会发生一样的错误。
    如果CRITICAL_SECTION m_CriticalSection;定义成全局变量,不初始化都不会出错,在想是不是不能定义成类成员,郁闷
      

  2.   

    CCHThreadControl::CCHThreadControl()
    {
    InitializeCriticalSection(&m_CriticalSection);
    }
    CCHThreadControl::~CCHThreadControl()
    {
    DeleteCriticalSection(&m_CriticalSection);
    }
      

  3.   

    关注,同出错!!!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相同我就不明白这指针怎么会指向刚被释放的区域去了