![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте!
Сколько не читал статей об указателях - так и не понял, Dispose и New ведь лишь возвращают память куче, не очищая ее? Потому что работа такой программы: Код:
program test;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure tst(b1:boolean);
var p:^integer;
begin
if b1 then begin
New(p);
p^:=666;
dispose(p);
end else begin
New(p);
writeln(p^);
dispose(p);
end;
end;
begin
tst(true);
tst(false);
readln;
end.Выводит в консоль 666. Значит, выходит, даже при вызове New затем все равно придется вручную чистить память, на которую указывает наш указатель? |
|
#2
|
||||
|
||||
|
как и везде в delphi нечего само не "очищается"
|
|
#3
|
|||
|
|||
|
А почему тогда например при входе в процедуру переменные типа string очищены?
|
|
#4
|
||||
|
||||
|
совпадение
|
|
#5
|
|||
|
|||
|
Во первых, строки - это отдельный разговор.
Во вторых, после вызова Dispose память считается освобожденной и при следующем распределении может быть выделенна для другой переменной. |