delphi字符串泄漏

前端之家收集整理的这篇文章主要介绍了delphi字符串泄漏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Delphi XE,并编写一个使用RemObjects SDK进行通信的应用程序(如果可能相关).我有FastMM调试,有时(并不总是)当我关闭它时会发出一个警告,说明单个“意外的内存泄漏”. “发生意外的内存泄漏.意外的小块泄漏是:117-124字节:UnicodeString x 1”.偶尔,我得到x2报告.

现在,我的理解是字符串是引用计数,并且由于没有其他对象导致泄漏,可能导致这种情况发生的情况是什么?在this StackOverflow question人们找不到泄漏的方法.

如果没有明显的方法,那么我将下载最新的FastMM源(它似乎不包含在XE源中).

[编辑一旦解决]找到这个的解决方案是安装FastMM源,并启用FullDebugMode来获取堆栈跟踪.

解决方法

想到的唯一方法就是使用threadvar,在不故意破坏字符串的情况下泄漏字符串(例如手动递增引用计数或执行一些混乱的指针操作).

像帮助文件所述,

Dynamic variables that are ordinarily
managed by the compiler (long strings,
wide strings,dynamic arrays,
variants,and interfaces) can be
declared with threadvar,but the
compiler does not automatically free
the heap-allocated memory created by
each thread of execution. If you use
these data types in thread variables,
it is your responsibility to dispose
of their memory from within the
thread,before the thread terminates.

除此之外,没有任何想到的事情尚未阐明.

[提问者编辑]这确实是问题,具体代码如下:

threadvar
    g_szAuthentication : String;


procedure TMyBase.SetAuthentication(szUserName,szPassword: String);
begin
    g_szAuthentication := '?name=' + szUserName + '&pass=' + szPassword;
end;
原文链接:https://www.f2er.com/delphi/102955.html

猜你在找的Delphi相关文章