Там нет утечки памяти.Ваш указатель 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;
Реплицирует логику вашего кода и устраняет риск доступанарушения.Однако ваш код возвращал часть строки, начиная с первого экземпляра /
, &
, #
или :
.Вы действительно этого хотели?