C++ DLL 在 DLL_PROCESS_DETACH 时 释放内存 报错
dll 定义了一个全局变量,用来缓存一些数据,可是在dll退出时,释放内存却遇到了异常,而那些动态分配的内存在我程序逻辑执行部分确实没有释放,为什么最后却释放出错呢?
程序如下
struct Buff {
uint8_t* data = nullptr;
size_t size = 0;
};
std::unordered_map<std::string, Buff> buffMap;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved) {
switch (reason) {
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
std::unordered_map<std::string, Buff>::iterator it;
for (it = buffMap.begin(); it != buffMap.end(); it++) {
delete[] it->second.data;
}
break;
}
return TRUE;
}
void function(/*...*/){
// new data[] -> buffMap
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
从贴出来的代码来看不出什么,可能是修改
uint8_t* data
的时候写内存越界了或者是重复释放。建议题主释放后clear掉map 、重写new[]/delete[],逐步缩小范围调试下