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),怀疑是不是这边出错。求教导……

应该是读取指针地址越界吧,你检查一下,在传递指针的时候(或者while里if判断之前,是否对pb做了位移操作,或者nSize不是pb的长度。追问

出错的这段程序根本不是我写的,是dbgheap.c中的,这段程序是没有错的。我可能没把问题说清楚,是我写了对话框的一段程序,运行一下没问题,但是关闭对话框的时候就出现了这个访问冲突的错误。我就问问什么原因容易造成这种错误,我是新手……呵呵

追答

这样没法猜,具体分析要通过代码调试。
dbgheap.c不是你写的,可。。你间接调用的啊,你要找到哪里调用的,再看具体哪个地址越界。(调试工具框内可以找到层级调用)

追问

好的,谢啦,我先试试

追答

看了你的问题补充。
如果有线程的话,可能性多了一个(尤其是关闭程序的时候报错),线程没有正常结束或者线程关闭处理没有做好。
还是要在调试的时候,找到中断语句(你程序中的,不是基础代码的),这样能够很明确的知道哪个地方有问题,不过有线程的就是比较麻烦,建议你仔细看看在程序退出前,对关闭线程的处理部分。

参考技术A 若是MFC对话框退出,你可以查看InitInstance()时,return 是否为TURE 参考技术B 但是到底这个怎么解决的啊?还不知道怎么搞呢。。我也是调试直到系统的C文件,可是之前的问题真的找不到呢。。

以上是关于0x5746723c (msvcr100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突的主要内容,如果未能解决你的问题,请参考以下文章

未找到 MSVCP100D.dll,[关闭]

0x5919c8ec (msvcr100d.dll) 处的第一次机会异常:0xC0000005:访问冲突读取位置 0xfeeefeee

vs2010运行总是提示:(msvcr90d.dll) 处最可能的异常: 0xC0000005,怎么回事

2>MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已经在 LIBCMTD.lib(dbgcalloc.obj) 中定义(示例代码

C++ 应用程序(调试版)包含 VS 运行时库 msvcr90.dll 和 msvcr90d.dll

为啥我的发布版本仍在寻找调试 DLL (MSVCR110D.dll)?