Mfc osgearth中的内存泄漏

Mfc osgearth中的内存泄漏,mfc,openscenegraph,osgearth,Mfc,Openscenegraph,Osgearth,我的目标是使用库OSGEarth制作一个MFC项目,可以显示模型“openstreetmap.earth”。我完成了这项工作,可以看到地球上的数据。但每次我关闭项目时,vs2015中的输出窗口都会显示程序中存在内存泄漏 以下是窗口输出: Detected memory leaks! Dumping objects -> {306240} normal block at 0x00000000076902F0, 16 bytes long. Data: <0,i

我的目标是使用库OSGEarth制作一个MFC项目,可以显示模型“openstreetmap.earth”。我完成了这项工作,可以看到地球上的数据。但每次我关闭项目时,vs2015中的输出窗口都会显示程序中存在内存泄漏

以下是窗口输出:

Detected memory leaks!
Dumping objects ->
{306240} normal block at 0x00000000076902F0, 16 bytes long.
Data: <0,i             > 30 2C 69 07 00 00 00 00 00 00 00 00 00 00 00 00 
{306239} normal block at 0x0000000007692C30, 9 bytes long.
Data: <Pragma:  > 50 72 61 67 6D 61 3A 20 00 
{303648} normal block at 0x0000000007693040, 16 bytes long.
Data: < 5i             > 90 35 69 07 00 00 00 00 00 00 00 00 00 00 00 00 
{303647} normal block at 0x0000000007693590, 9 bytes long.
Data: <Pragma:  > 50 72 61 67 6D 61 3A 20 00 
{301180} normal block at 0x00000000076938B0, 16 bytes long.
 Data: <`8i             > 60 38 69 07 00 00 00 00 00 00 00 00 00 00 00 00 
{301179} normal block at 0x0000000007693860, 9 bytes long.
 Data: <Pragma:  > 50 72 61 67 6D 61 3A 20 00 
{297799} normal block at 0x0000000007691060, 16 bytes long.
 Data: <  i             > 10 10 69 07 00 00 00 00 00 00 00 00 00 00 00 00 
}

我将
m_模型定义为
osg::ref\u ptr m_模型
。这是智能指针

为什么会有内存泄漏,我如何解决这个问题

以下是源代码:

我相信这些报告的“泄漏”是误报。请参阅解释原因的此线程:


你说的“屏蔽此代码”是什么意思?确保调用了COSGEartch析构函数。确保OSG代码不使用任何进一步的缓存?使用_crtBreakAlloc检查分配给那里的内容@xMRi。我的意思是,当我删除这一行“m_Model=osgDB::readNodeFile(m_strModelName);”时,不再有内存泄漏。调用了COSGEartch析构函数。因此可能存在一些缓存。读取节点文件可能会分配一些全局静态变量。Visual Studio会报告在退出时仍分配的所有内存。这包括静态分配的内存和仍在使用但尚未释放的内存。这会导致很多误报。
void COSGEarth::InitSceneGraph(void)
{
    // Init the main Root Node/Group
    m_Root = new osg::Group;
    // Load the Model from the model name, 
    //delete below line, no memory leak
    m_Model = osgDB::readNodeFile(m_strModelName);
    if (!m_Model) return;

    // Optimize the model
    osgUtil::Optimizer optimizer;
    optimizer.optimize(m_Model.get());
    optimizer.reset();

    // Add the model to the scene
    m_Root->addChild(m_Model.get());