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
}
从贴出来的代码来看不出什么,可能是修改
uint8_t* data
的时候写内存越界了或者是重复释放。建议题主释放后clear掉map 、重写new[]/delete[],逐步缩小范围调试下