IPB
ЛогинПароль:

> Утечка памяти
klem4
сообщение 20.08.2006 18:56
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ухх что-то мозг уже не варит, куда память пропадает ?

Поменял New/Dispose на GetMem/FreeMem не помогло.

{$mode objfpc}

uses crt;

type

  TData = integer;

  PList = ^TList;

  TList = record
    data : TData;
    next : PList;
  end;

  TStack = object

    public

      constructor Init;
      destructor  Done;

      procedure Push(item : TData);
      function  Pop : TData;

    private

      First, Last : PList;
  end;

constructor TStack.Init;
begin
  First := nil;
  Last  := nil;
end;

destructor TStack.Done;
begin
  FreeMem(First, sizeof(TList));
  FreeMem(Last, sizeof(TList));
end;

procedure TStack.Push(item : TData);
var
  temp : PList;
begin

  GetMem(temp, sizeof(TList));

  temp^.data := item;
  temp^.next := nil;

  if First = nil then begin
    First := temp;
    Last  := temp;
  end else begin
    Last^.next := temp;
    Last := temp;
  end;
end;

function TStack.Pop : TData;
var
  temp : PList;
begin

  if First = nil then begin
    writeln('nil');
    exit;
  end;

  new(temp);

  temp := First;

  result := First^.Data;
  First  := First^.Next;

  FreeMem(temp, sizeof(TList)); // ===================> ТУТ память не освобождается :(
end;

var

  s : TStack;

begin
  clrscr;

  writeln('Free Before = ', GetHeapStatus.TotalFree);

  s.Init;

  s.Push(3);
  s.Push(12);
  s.Push(4);

  s.Pop;
  s.Pop;
  s.Pop;

  s.Done;

  writeln('Free After  = ', GetHeapStatus.TotalFree);

  readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 19:13
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"