使用C#/ C ++包装器寻找可能的内存泄漏

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

我有一个调用C ++ DLL的C#程序。该函数的包装代码如下所示。

由于重复调用此函数,内存使用会继续增长,并且看起来好像存在内存泄漏。并且看起来该问题与下面代码中的matchingFragments->Add行相关联。如果我注释掉那一行,内存使用是稳定的。

在此程序的先前迭代中,matchingFragments不是列表但设置为固定数量的元素,在重复调用此函数时,内存使用将保持稳定。所以我怀疑某些记忆没有被释放,但我不知道问题是什么,无论是matchedFragmentsreturnedFragments,还是两者都没有。我也不知道这些(我是一个C开发人员正在努力解决这个问题)知道如何调试这个,所以任何建议都将不胜感激。

bool SearchWrapper::SpectrumSearch([Out] List<FragmentWrapper^>^% returnedFragments)
{
   vector<Fragment> matchedFragments;

   // perform the search
    bool isSuccess = _pSearchMgr->PeptideSearch(matchedFragments);

   // Convert data back to the managed world

   returnedFragments = gcnew List<FragmentWrapper^>();
   for (auto frag : matchedFragments)
   {
      returnedFragments->Add(gcnew FragmentWrapper(frag));
   }

   return isSuccess;
}
c# c++ c++-cli
1个回答
1
投票

事实证明我的问题的实际修复是需要为FragmentWrapper类定型器。有一个析构函数但不是终结器。一旦我添加了终结器,内存泄漏就消失了。

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