调试断言失败 - debug_heap.cpp:996

问题描述 投票:-1回答:1

我使用的是Visual Studio 2017。我有一个多项目解决方案(c++)。有一个创建可执行文件的项目(核心应用程序)和创建动态库(插件)的项目。核心应用在运行时加载插件,使用的是 LoadLibraryGetProcAddress 函数。一个核心应用定义了一个对象,这个对象包含一个地图,这里是一个简化的定义。

class T
{
public:
    void fun(const std::string& key)
    {
        ++data_[key];
    }
private:
    std::map<std::string, int> data_;
};

T对象在核心应用中静态定义,并在插件中注册(通过指针),插件以这种方式使用它。

void Plugin::fun()
{
    t->fun(key);
}

当插件调用函数时进行内存分配,但deallocation是在核心应用中进行的。这导致关闭应用程序后出现以下错误。

enter image description here

当我只在核心应用中使用T对象时,这个错误就不存在了。课题 但有一个错误信息是有点不同的。核心应用和插件的一个代码生成属性是这样的。

enter image description here

这意味着什么?Runtime Library 记录设置为 different options 用粗体字?我应该如何设置 Runtime Library 在核心应用和插件中解决这个问题?

c++ visual-studio-2017
1个回答
1
投票

要查看你实际使用的是什么运行时库,你只需要从下拉菜单中选择一个平台和配置(你正在构建的那些)。 你的应用和你的插件的运行时库都需要是多线程DLL(或Debug构建的多线程Debug DLL),你正在构建的配置(Debug或Release)也需要匹配。

当插件调用函数时,内存分配就会发生,但deallocation是在核心应用中进行的。

这是很脆弱的。 如果你能安排的话,我建议在插件中同时进行分配和deallocating,或者在app中同时进行。

© www.soinside.com 2019 - 2024. All rights reserved.