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

发布于 2022-09-12 02:05:41 字数 909 浏览 24 评论 0

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
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(1

一绘本一梦想 2022-09-19 02:05:41

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文