DLL-MFC DLL中运用了Csocket类,VS2008编写的应用程序调用该DLL时没有问题,就是运用程序退出时报错“Socket Notification Sink:XXX”内存不能为read错误

DLL-MFC DLL中运用了Csocket类,VS2008编写的应用程序调用该DLL时没有问题,就是运用程序退出时报错“Socket Notification Sink:XXX”内存不能为read错误

夜无邪 发布于 2017-10-25 字数 531 浏览 1297 回复 1

用VS2008建的规则MFC DLL中运用了Csocket类,VS2008编写的应用程序调用该DLL时没有问题,就是运用程序退出时报错“Socket Notification Sink:XXX”内存不能为read错误。应用程序采用隐式加载的DLL,另外DLL的源文件中只定义了一个CSocket全局对象,其余没有其他全局或静态变量.不知是什么原因,谢谢指导!

错误提示:XXX.exe 中的 0x00f914f5 (Communication1.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突。调试定位到map_pp.cpp中的BOOL CMapPtrToPtr::RemoveKey(void* key)函数体的第二行if (m_pHashTable == NULL)

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想挽留 2017-10-26 1 楼

单从你的描述来看,很难知道引发此问题原因,如果能贴出引发崩溃时的call stack就比较好找问题了。
从错误提示来看,表面上是内存错误发生在CMapPtrToPtr::RemoveKey函数的if (m_pHashTable == NULL)行上,实际上是m_pHashTable这个成员变量已经无效,即调用RemoveKey函数的CMapPtrToPtr对象已经无效;再来看sockcore.cpp文件中RemoveKey函数的调用之处,只有CAsyncSocket::DetachHandle函数,即DetachHandle函数调用之前,CMapPtrToPtr对象已经被释放了。