zoukankan      html  css  js  c++  java
  • 问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

    ================声明=====================

    本文原创,转载请保持文章的完整性(含本声明),并显要的著名作者和出处。

    本文链接:http://blog.csdn.net/wlsgzl/article/details/42003487

    =========================================

    电脑有一个SSD和一个HHD,SSD只有一个分区做系统盘,HHD分4个区:D、E、F、G。其中D盘放工程代码。

    还原电脑的时候,诺顿抽风,把HHD的第一分区给我还原了……这是识别错硬盘的节奏吗?

    =========================================

    结果尚未备份的一小部分小代码没了。于是照着以前的思路又写了一下。

    就这样,问题来了。

    =========================================

    开开心心地打算看一下代码效果,结果遇到了一个问题。

    VS2010会自动在出现问题的地方停下,这是极好的。

    但,可悲的是,我开了线程,出错的是线程函数。

    void CMainFrame::DealWithSlaveData(LPVOID lpVoid)
    {
    	//test
    	CMscommWLS* pSlaveComm=(CMscommWLS*)lpVoid;
    
    	CString strTempData;
    
    	EnterCriticalSection(&(pSlaveComm->m_csDataRecv));	
    	strTempData=pSlaveComm->m_queStrData.front();
    	pSlaveComm->m_queStrData.pop();
    	LeaveCriticalSection(&(pSlaveComm->m_csDataRecv));
    
    	OutputDebugString(strTempData);
    }
    打上断点跟变量,发现没什么问题的样子,没有什么错误的指针。

    于是开始搜资料。

    =========================================

    有用TryEnterCriticalSection版本代替EnterCriticalSection的,有添加宏取消com支持的,还有推测EnterCriticalSection嵌套的然后大家一致附和。

    像这种问题都是看具体情况才能确定的,所以网上有各种各样的回答方式,不管真假各种转载。

    大多不可信。

    =========================================

    想了半天,觉得还得从提示入手:最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突。

    这位置?这个位置就是非法写入啊。

    必然是写地址有问题。

    那么只能在看下lpVoid的指针。没什么不对的样子,无果。

    再上一步传入这个值的地方呢?

    m_TPforSlave.Start(m_CommCtrl.m_hSmpDataNeedHandle,DealWithSlaveData,this);
    就是第三个参数了。

    乍一看没什么,这不是有吗?但是这个this是谁呢?是CMainFrame*!而我要得是CMscomm*!

    下面问题就好办了,传入指定类型的实参或者强制转换传入的值为正确的格式。



    ===============圣诞节就要到了,又要感受来自大宇宙的深深恶意了。==================




  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202069.html
Copyright © 2011-2022 走看看