![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно очищать буффер? [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.