有如下声明,假设V已赋值
var V:OleVariant;
如下代码似乎会造成内存泄漏
SysUtil.Pos('finish.html', V);
或
VarToStr(V);
原因猜测:
SysUitl.Pos要求的第二个参数为String, 那么程序运行时把V:OleVariant自动转换为String, 调用堆栈如下
Routine Name Class Name Source Line Source File Module Name
SysAllocStringLen 0 OLEAUT32.DLL
SysAllocStringLen 0 QASCLIENT.EXE
WStrFromPWCharLen 0 QASCLIENT.EXE
WStrCopy 0 QASCLIENT.EXE
VarToLStr 0 QASCLIENT.EXE
TWebWindow::BrowserBeforeNavigate2 TWebWindow 130 frmWebWindow.pas QASCLIENT.EXE (上边事例代码Pos调用位置)
SysAllocStringLen 0 OLEAUT32.DLL
SysAllocStringLen 0 QASCLIENT.EXE
WStrFromPWCharLen 0 QASCLIENT.EXE
WStrCopy 0 QASCLIENT.EXE
VarToLStr 0 QASCLIENT.EXE
TWebWindow::BrowserBeforeNavigate2 TWebWindow 130 frmWebWindow.pas QASCLIENT.EXE (上边事例代码Pos调用位置)
暂时不明
本文探讨了在特定编程环境中,由于类型转换不当导致的潜在内存泄漏问题。通过跟踪调用堆栈,分析了从OleVariant到字符串转换的过程,并对可能的原因进行了推测。
3521

被折叠的 条评论
为什么被折叠?



