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

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

Как правильно очищать буффер? [XP]


Алик ©   (2007-09-27 23:28:00) 

Добрый вечер

В проге я выделяю память под буффер. В конце память надо освободить, как лучше это сделать?

var  Buffer : PChar;
begin
  Buffer := PChar(AllocMem(10));
...
Так
  Buffer := PChar(AllocMem(0));
или
   FreeMem(Buffer);
или
   Finalize(Buffer);
или
   Dispose(Buffer);
end;


jack128_   (2007-09-28 00:11:00) [1]


> А как узнать выделена память под буфер или нет?

P := nil;
try
 if <условие>  then
   P := AllocMem(Random(10));
 ...
finally
 if P <> nil then
  FreeMem(P);
end;


{RASkov}   (2007-09-28 00:00:00) [2]

> [6] Алик   (27.09.07 23:53)
> SizeOf(Buffer) ?

Всегда будет одно и то же...

> А как узнать выделена память под буфер или нет?

Никак....
или другими словами если <условие x> и выполнилась строка <Buffer := PChar(AllocMem(10));> то выделено...


Алик   (2007-09-27 23:53:00) [3]

А как узнать выделена память под буфер или нет?
SizeOf(Buffer) ?


{RASkov}   (2007-09-27 23:51:00) [4]

> [3] Алик   (27.09.07 23:47)

if not <условие x> then Exit else
try
 Buffer := PChar(AllocMem(10));
 ....
finally
 FreeMem(Buffer);
end;


Anatoly Podgoretsky   (2007-09-27 23:49:00) [5]

> Алик  (27.09.2007 23:47:03)  [3]

А нафига ты пытаешься освобождать невыделеную память?


Алик   (2007-09-27 23:47:00) [6]

FreeMem работает нормально когда буффер создан, но если буффер еще не создан, а в проге вызывавется Freemem, то идет сбой. Например:

try
 if <условие x> = True then begin
                                      Buffer := PChar(AllocMem(10));
                                       ....
                                      end
 else
    Exit;

finally
 FreeMem(Buffer);
end;


Johnmen   (2007-09-27 23:40:00) [7]

Нажать F1 на AllocMem и почитать, наверное, очень трудно?


Anatoly Podgoretsky   (2007-09-27 23:38:00) [8]

Description

AllocMem allocates a block of the given size on the heap. Each byte in the allocated buffer is set to zero. To dispose the buffer, use FreeMem.


Наверх

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