![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PChar утечка памяти
Bruce © (2006-04-02 20:35:00)Здарствуйте!
Есть ли утечка памяти в данном коде?
var
//s1: string;
pText, pResultText: PChar;
ms: TMemoryStream;
begin
Result := false;
ms := TMemoryStream.Create;
pResultText := nil;
try
pText := PChar(AText);
ms.Write(pText^, Length(pText));
ms.Position := 0;
if ProcessData(ms) then // производим опр. действия над потоком
begin
GetMem(pResultText, ms.Size);
ms.Read(pResultText^, ms.Size);
AText := pResultText;
Result := true;
end;
finally
ms.Free;
if pResultText <> nil then
FreeMem(pResultText);
end;
Bruce (2006-04-02 22:17:00) [1]
> Джо © (02.04.06 21:10) [3]
а чего там опасаться то ) выделил память, скопировал память )
Рамиль (2006-04-02 21:11:00) [2]
> Да, AText - это параметр var string, сделаю как вы советуете,
> просто с опаской отношусь к манипуляциям памятью с типом
> string :)
смело
Джо (2006-04-02 21:10:00) [3]> [2] Bruce (02.04.06 20:56)
> просто с опаской отношусь к манипуляциям памятью с типом
> string :)
Ого, а к конструкциям типа pResultText^ без опаски? ;)
Bruce (2006-04-02 20:56:00) [4]
> begin...end © (02.04.06 20:50) [1]
> Если AText — это string, то я бы сделал примерно так:
Да, AText - это параметр var string, сделаю как вы советуете, просто с опаской отношусь к манипуляциям памятью с типом string :)
begin...end (2006-04-02 20:50:00) [5]> Bruce (02.04.06 20:35)
> Есть ли утечка памяти в данном коде?
Нет. Но и необходимости использования PChar тоже нет.
Если AText — это string, то я бы сделал примерно так:
var
ms: TMemoryStream;
begin
Result := False;
ms := TMemoryStream.Create;
try
ms.Write(AText[1], Length(AText));
ms.Position := 0;
if ProcessData(ms) then
begin
SetLength(AText, ms.Size);
ms.Read(AText[1], ms.Size);
Result := True
end
finally
ms.Free
end
end