![]() |
|
|
Регистрация | << Правила форума >> | 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 нечего само не "очищается"
Arrrgh |
#3
|
|||
|
|||
![]() А почему тогда например при входе в процедуру переменные типа string очищены?
|
#4
|
||||
|
||||
![]() совпадение
Arrrgh |
#5
|
|||
|
|||
![]() Во первых, строки - это отдельный разговор.
Во вторых, после вызова Dispose память считается освобожденной и при следующем распределении может быть выделенна для другой переменной. |