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

Debug assertion failed - debug_heap.cpp:996

我用的是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);
}

内存分配在插件调用函数时发生,但释放是在核心应用程序中执行的。关闭应用程序后导致以下错误:

当我仅从核心使用 T 对象时,该错误不存在 app.I 发现了类似的 但错误消息略有不同。核心应用程序和插件的代码生成 属性 如下所示:

Runtime Library 记录设置为 different options 加粗字体是什么意思?我应该如何在核心应用程序和插件中设置 Runtime Library 来解决问题?

要查看您实际使用的运行时库,您只需要 select 从下拉列表中选择一个平台和配置(您正在为其构建的平台和配置)。对于您的应用程序和您的插件,运行时库需要是多线程 DLL(或用于调试构建的多线程调试 DLL),并且您正在构建的配置(调试或发布)也需要匹配。

The memory allocation takes places when a plugin calls the function but deallocation is performed in the core app.

这很脆弱。如果可以的话,我建议在插件中分配和取消分配,或者在应用程序中同时分配和取消分配。