• 问题解决——使用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*!

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



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




  • 相关阅读:
    spring boot多数据源配置(mysql,redis,mongodb)实战
    迷你MVVM框架 avalonjs 学习教程3、绑定属性与扫描机制
    迷你MVVM框架 avalonjs 学习教程2、模块化、ViewModel、作用域
    迷你MVVM框架 avalonjs 学习教程1、引入avalon
    chrome36可以使用自定义元素的回调了
    VML元素的相关资料
    不使用Math.random实现随机数。
    迷你MVVM框架 avalonjs 1.3.4发布
    iscroll源码学习(1)
    对avalon的类名操作进行升级
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202069.html
Copyright © 2020-2023  润新知