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

前端开发 前端开发 主题:1148 回复:2395

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

夜无邪 发布于 2017-10-25 字数 531 浏览 1240 回复 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)

发布评论

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

支持 Markdown 语法,需要帮助?

评论(1

想挽留 2017-10-26 1 楼

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