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

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

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

时间: 2024-10-09 18:05:26

问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突的相关文章

(msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突

一般都是指针访问越界或者不能访问的地址 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突,布布扣,bubuko.com (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000000时发生访问冲突

0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突。

下面的代码在编译,运行时没有问题,在输入内容是出现异常如下: 0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突. #include "stdafx.h"#include <conio.h>#include <stdio.h> int main(){ int NUM, I; struct STUDENT { char NAME[30]; int A

HelloWorld.exe 中的 0x0f9265f6 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000038 时发生访问冲突

加载的资源错误,要么资源不存在,要么路径不对. 第一次出错是因为未把资源放入Resources文件夹里 第二次出错是因为资源路径取错(比如要取的资源文件是DemoLogin.ExportJson,若该文件在Resources文件夹里,则路径是“DemoLogin.ExportJson”,但我的资源是在Resources文件夹的DemoLogin文件夹里,所有路径是“DemoLogin/DemoLogin.ExportJson”)

C# winform datagridview 内嵌控件值改变后立即触发事件,而不需要离开该单元格时才触发,此时需要用到dgv_CurrentCellDirtyStateChanged事件

以下是参考代码 //datagridview内嵌控件值修改事件 private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e) { if (dgv.IsCurrentCellDirty) { dgv.CurrentCellDirtyStateChanged -= dgv_CurrentCellDirtyStateChanged; dgv.CommitEdit(DataGridViewDataErrorContex

安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643), &quot;安装时发生严重错误 &quot; (Ela)

原文:安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643), "安装时发生严重错误 " (Ela) 安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643), "安装时发生严重错误 &qu

Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件,导致发生错误。如果未分配 ID,请显式设置引发回发事件的控件的 ID 属性以避免此错误。

ylbtech-Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件,导致发生错误.如果未分配 ID,请显式设置引发回发事件的控件的 ID 属性以避免此错误. 1.返回顶部 1. “/”应用程序中的服务器错误. 由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件

selenium 问题解决:如何使页面滚动条移动到指定元素element的位置处?

在用selenium做测试时,会遇到需要操作的元素不在当前可视页面中的情况,如果是手工测试,自然很简单,手动拖拽滚动条到目标元素处即可. 那么,selenium如何实现这种情形呢?答案是需要借助Javascript. Java代码如下: 1 WebElement target = driver.findElement(By.xpath(xPathExpression)); 2 ((JavascriptExecutor) driver).executeScript("arguments[0].sc

KB3002657补丁更新后windows7/08R2服务器远程连接异常(凭据验证失败)的修复

补丁更新后服务器远程连接报错及解决方法 问题描述: 3月26日晚上,按照惯例进行系统补丁更新操作,补丁如下: KB3002657 KB3030377 KB3032323 KB3033889 KB3033929 KB3034344 KB3035126 KB3035131 KB3035132 KB3039066 KB3046049 KB3032359 更新并重启后,发现域外本地windows7系统的计算机无法远程登录域内平台上的windows server2008R2服务器(或表现为域外计算机访问域

安装msdn2008后,导致vs2010 扩展导致异常的解决

只要在VS2010输入一个字符,它就报错 ":Microsoft Visual Studio 2010 遇到了异常,可能是由某个扩展导致的".直接google免得麻烦. 错误上说"您可以在命令行上使用/LOG参数运行应用程序,然后检查文件"C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\10.0\ActivityLog.xml”以获取详细信息." 最终看网上资料,才知道是注册表被改