C++ DLL 在 DLL_PROCESS_DETACH 时 释放内存 报错

dll 定义了一个全局变量,用来缓存一些数据,可是在dll退出时,释放内存却遇到了异常,而那些动态分配的内存在我程序逻辑执行部分确实没有释放,为什么最后却释放出错呢?
image.png

程序如下


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
}
阅读 3.5k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题