C++ 如何清除BSTR中的内存泄漏

C++ 如何清除BSTR中的内存泄漏,c++,memory,C++,Memory,运行我的应用程序时,内存会增长。所以我收集了UMDH数据,它指向下面的代码 BSTR bstrTestName = strCurTestName.AllocSysString(); BSTR bstrTestInstname = strTestInstName.AllocSysString(); HRESULT hr = g_pDLServiceNetInterop->SetCurTestName(bstrTestName, pCurTestData->GetTestType(),

运行我的应用程序时,内存会增长。所以我收集了UMDH数据,它指向下面的代码

BSTR bstrTestName = strCurTestName.AllocSysString();
 BSTR bstrTestInstname = strTestInstName.AllocSysString();
HRESULT hr = g_pDLServiceNetInterop->SetCurTestName(bstrTestName, pCurTestData->GetTestType(), bstrTestInstname, pCurTestData->GetTestMemberCount());
其中strurtestname和strtestname是
TString

在这个方法中我没有看到对SysFreeString的调用


我知道,如果我们将BSTR传递给客户机,它将负责清除内存。在当前场景中,这是一个泄漏,我需要调用SysFreeString还是不是泄漏。

您可以调用
SysFreeString(bstrTestName)
函数来取消分配字符串

编辑:
正如注释所指出的,由于您没有将字符串传递给客户端,就像任何分配的内存一样,它将保持分配状态,除非您通过SysFreeString函数调用释放它。

您可以调用
SysFreeString(bstrTestName)
函数来解除分配字符串

编辑:
正如注释所指出的,由于您没有将字符串传递给客户端,就像任何分配的内存一样,它将保持分配状态,除非您通过SysFreeString函数调用释放它。

这是一个泄漏。我们需要明确地澄清这一点。我使用了CComBSTR而不是BSTR,它解决了泄漏(是的,调用SysFreeString也解决了泄漏)。

这是一个泄漏。我们需要明确地澄清这一点。我没有使用BSTR,而是使用了CComBSTR,它解决了泄漏问题(是的,调用SysFreeString也解决了泄漏问题)。

我认为问题在于OP是否需要这样做,或者他们调用的COM方法是否应该拥有并释放字符串。是的,我确实将字符串传递给客户端,但我不是作为引用或指针传递。因此,我不确定我们是否需要显式清除它,或者COM方法是否会自动获得清除它的所有权。我认为问题是OP是否需要这样做,或者他们调用的COM方法是否应该获得字符串的所有权并释放它。是的,我会将字符串传递给客户端,但我不是作为引用或指针传递。因此,我不确定我们是否需要显式地清除它,或者COM方法将自动获得清除它的所有权。