当运行我的应用程序时,它有一个内存增长。所以我收集了UMDH数据,它指向下面的代码,
BSTR bstrTestName = strCurTestName.AllocSysString();
BSTR bstrTestInstname = strTestInstName.AllocSysString();
HRESULT hr = g_pDLServiceNetInterop->SetCurTestName(bstrTestName, pCurTestData->GetTestType(), bstrTestInstname, pCurTestData->GetTestMemberCount());其中strCurTestName和strTestInstName是TString。
我在这个方法中看不到对SysFreeString的调用。
我知道,如果我们将BSTR传递给客户端,它将负责清除内存。在当前的场景中,这是一个漏洞,我需要调用SysFreeString还是不是一个漏洞。
发布于 2020-09-17 00:32:52
这是一个漏洞。我们需要明确地清除它。我没有使用BSTR,而是使用CComBSTR,它解决了泄漏问题(是的,调用SysFreeString也解决了泄漏问题)。
发布于 2020-09-16 14:48:33
您可以调用SysFreeString(bstrTestName)函数来释放字符串。
Edit:正如注释所指出的,由于您没有将字符串传递给客户端,就像任何已分配的内存一样,它将保持已分配状态,除非您通过SysFreeString函数调用释放它。
https://stackoverflow.com/questions/63913974
复制相似问题