0x5746723c (msvcr100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0x5746723c (msvcr100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突相关的知识,希望对你有一定的参考价值。
仅仅是MFC对话框程序退出的时候,就会出现这个错误,所用编程工具是vs2010。有经验的大牛们过来帮个忙,非常急,后期加分。小弟先谢啦……
中断到:extern "C" static int __cdecl CheckBytes(
unsigned char * pb,
unsigned char bCheck,
size_t nSize
)
while (nSize--)
if (*pb++ != bCheck)//停到这个地方……
return FALSE;
return TRUE;
中断的这段程序是dbgheap.c中的,这个文件是系统的,不是我写的。而且不是我自己建的工程底下的文件。就想问问一般什么情况下会造成这个错误。我现在就是不知道我的程序那部分哪段代码有问题才造成的。
找到一个疑似错误:我是改的别人的代码,别人源代码:
iRecievedNum=recvfrom(m_sRecv,chRecv,BLOCK,0,(LPSOCKADDR)&m_RemoteAddr,&tmp);
cmpReceive.SetDstSamples(iRecievedNum,(unsigned char*)chRecv);
我进行了以下修改:
将socket的接受函数放在了一个线程中,然后利用onmessage专门用一个函数来处理收到的数据。线程中接收函数是recvfrom(usock,recvBuf,BLOCK,0,(SOCKADDR*)&addrFrom,&len);然后把 recvBuf传到那个函数中。
函数处理如下:CString recvData=(char*)lParam;
cmpReceive.SetDstSamples((recvData.GetLength())+1,(unsigned char*)((LPCTSTR)recvData));
这边因为要将cstring的转成unsigned char*,我是(unsigned char*)((LPCTSTR)recvData),怀疑是不是这边出错。求教导……
出错的这段程序根本不是我写的,是dbgheap.c中的,这段程序是没有错的。我可能没把问题说清楚,是我写了对话框的一段程序,运行一下没问题,但是关闭对话框的时候就出现了这个访问冲突的错误。我就问问什么原因容易造成这种错误,我是新手……呵呵
追答这样没法猜,具体分析要通过代码调试。
dbgheap.c不是你写的,可。。你间接调用的啊,你要找到哪里调用的,再看具体哪个地址越界。(调试工具框内可以找到层级调用)
好的,谢啦,我先试试
追答看了你的问题补充。
如果有线程的话,可能性多了一个(尤其是关闭程序的时候报错),线程没有正常结束或者线程关闭处理没有做好。
还是要在调试的时候,找到中断语句(你程序中的,不是基础代码的),这样能够很明确的知道哪个地方有问题,不过有线程的就是比较麻烦,建议你仔细看看在程序退出前,对关闭线程的处理部分。
以上是关于0x5746723c (msvcr100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突的主要内容,如果未能解决你的问题,请参考以下文章
0x5919c8ec (msvcr100d.dll) 处的第一次机会异常:0xC0000005:访问冲突读取位置 0xfeeefeee
vs2010运行总是提示:(msvcr90d.dll) 处最可能的异常: 0xC0000005,怎么回事
2>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义(示例代码