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
}
阅读 710
评论
    1 个回答

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

      撰写回答

      登录后参与交流、获取后续更新提醒

      相似问题
      推荐文章