Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дин.массив на выходе ф-ции и утечка [D7]


Страницы:   1 2

GanibalLector ©   (2007-01-10 23:26:00) 

При использовании такой конструкции получаю утечку на всю длину массива :

function Get(...): Pointer;
var
V: array of sometype;
begin
SetLength(V, xxx);
...
Inc(PLongint(Longword(V) - 8)^);
Result := V;
end


Вопрос : как, собственно, избавится от данной проблемы ?
Заранее спасибо.


Игорь Шевченко   (2007-01-10 23:35:00) [21]


> Inc(PLongint(Longword(V) - 8)^);


А это зачем ?


GanibalLector   (2007-01-10 23:28:00) [22]

Весь код :

type
TMyData = packed record
 Mode:Byte;
 Data:array of String[$FF];
end;
PMyData = ^TMyData;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function Potok(Param:PMyData):DWord;
 var I:Integer;
begin
 // работаем с массивом ...

 Param.Data:=nil; // освобождение дин.массива
 Dispose(Param);
 Result:=0;
end;

function GetData:Pointer;
 var S:array of String[$FF];
     I:Integer;
 const Count = 150;
begin
 SetLength(S,Count);
 for I:=0 to Count-1 do
  S[I]:='Test'+IntToStr(I);
 Inc(PLongint(LongWord(S) - 8)^);
 Result := S;
end;

procedure TForm1.Button1Click(Sender: TObject);
 var ThreadID:DWord;
     Obj:PMyData;
begin
 New(Obj);
 Obj^.Mode:=$A;

 // так работает БЕЗ УТЕЧЕК

 SetLength(Obj^.Data,3);
 Obj^.Data[0]:='Test1';
 Obj^.Data[1]:='Test2';
 Obj^.Data[2]:='Test3';

 // а так С УТЕЧКОЙ

 //Obj^.Data:=GetData;

 CloseHandle(BeginThread(nil,0,@Potok,Obj,0,ThreadID));
end;

end.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо