gpt4 book ai didi

delphi - 这会导致Delphi中的内存泄漏吗?

转载 作者:行者123 更新时间:2023-12-03 18:57:36 26 4
gpt4 key购买 nike

为了仅获取文件名:

procedure TSomeClass.GetFileName(AData : string) : string;
var
p : pchar;
begin

p := pchar(AData);
while not (p^ in ['/', '&', '#', ':']) do
inc(p);

result := p;

end;

最佳答案

那里没有内存泄漏。指针p指向字符串AData拥有的一块内存,因此您不需要释放p。字符串类为您管理所有分配和释放。

但是,可能发生的情况是,如果字符串不包含这4个字符中的至少一个,则循环将结束并最终引发访问冲突。您应该考虑在循环到达空终止符时终止循环。

完全避免使用指针更简单:

function TSomeClass.GetFileName(const AData: string): string;
var
i, len: Integer;
begin
len := Length(AData);
for i := 1 to len do
if AData[i] in ['/', '&', '#', ':'] then begin
Result := Copy(AData, i, len);
exit;
end;
Result := '';
end;


复制将复制代码的逻辑,并消除访问冲突的风险。但是,您的代码返回的字符串部分是从 /&#:的第一个实例开始的,并包括这些实例。那真的是您想要的吗?

关于delphi - 这会导致Delphi中的内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com