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

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

New(), Dispose() TaskManager [D6, WinXP]


DVM ©   (2003-10-15 13:02:00) 

Случайно, разбирая поведение одной своей программы заметил, что если я выделяю в программе память с помощью New и освобождаю с помощью Dispose, то объем памяти, занимаемой моей программой (по данным из TaskManagera от XP) только увеличивается и никогда не уменьшается. Причем память реально освобождается, потому как обратиться к освобожденному участку уже нельзя. Что это? Особенность менеджера памяти или так не должно быть?


DVM   (2003-10-16 12:22:00) [1]

Собственно нашел я ошибку - простая опечатка, освобождал не ту переменную.

Всем спасибо за участие.


DVM   (2003-10-15 15:49:00) [2]


> Skier © (15.10.03 15:45) [14]


Что ж. Жаль. Буду разбираться сам. Или попробую сделать урезанный вариант кода и тогда размещу здесь.

Всем большое спасибо!


Skier   (2003-10-15 15:45:00) [3]


> Если конечно Вы не против.

К сожалению, я против. Есть своя работа...


DVM   (2003-10-15 15:43:00) [4]


> Skier © (15.10.03 15:34) [12]
>
> Если проблема не надуманная, то часто бывает так что когда
> в форум постят реальный код, а не пример, то вот тут ларчик
> и открывается...

Проблема реальная, но, к сожалению кода с собой нет, он дома, а я на работе. К тому же сам исходный код огромный, я думаю не стоит его сюда. Если Вы, Анатолий, не против, я вышлю вам несколько позднее исходник на почтовый ящик. Если конечно Вы не против.
Может статься, что я просто не замечаю какой-нибудь банальной ошибки в коде. Может быть.


Skier   (2003-10-15 15:34:00) [5]


> . Конечно у меня исходный код не такой примитивный, там
> у меня есть TabControl, с каждым итемом которого связаны
> дополнительные данные.

Если проблема не надуманная, то часто бывает так что когда в форум постят реальныйкод, а не пример, то вот тут ларчик и открывается...


DVM   (2003-10-15 15:27:00) [6]


> Игорь Шевченко © (15.10.03 15:17) [10]
> MemProof конкретно на этот кусок кода не ругается :)

Нет он ругается конкретно на выделение/освобождение памяти и указывает конретно на номер строки в исходном коде, которое происходит так как я написал.


Игорь Шевченко   (2003-10-15 15:17:00) [7]

MemProof конкретно на этот кусок кода не ругается :)


DVM   (2003-10-15 15:16:00) [8]


> Skier © (15.10.03 15:00) [8]

А вот MemProof ругается. А говорят, что верить ему можно. Конечно у меня исходный код не такой примитивный, там у меня есть TabControl, с каждым итемом которого связаны дополнительные данные. Но суть та же.


Skier   (2003-10-15 15:00:00) [9]

>DVM © (15.10.03 14:56) [7]
С точки зрения работы с памятью, кусок кода правильный.


DVM   (2003-10-15 14:56:00) [10]

Вот набросал кусок, примерно на такой же ругается MemProof. Но мне не понятно почему. Он говорит, что 3 раза не освободили память.

program demo;

type

PMyData = ^TMyData;
TMyData = record
aaa: integer;
bbb: integer;
end;

var
x: array[1..3] of integer;
p: PMyData;

procedure p1;
var
i: integer;
begin
for i:=1 to 3 do
begin
New(P);
P^.aaa:=5;
P^.bbb:=7;
x[i]:=longint(P);
end;
end;

procedure p2;
var
i: integer;
begin
for i:=1 to 3 do
begin
Dispose(PMyData(x[i]));
end;
end;

begin
p1;
p2;
end;


Игорь Шевченко   (2003-10-15 14:37:00) [11]

DVM © (15.10.03 14:17)

MemProof"у можно верить


DVM   (2003-10-15 14:17:00) [12]


> Игорь Шевченко © (15.10.03 13:34) [4]

А кому тогда верить? Пробовал MemProof, так тот вообще говорит, что я не освобождаю память. А дело лишь в том, что выделение и освобождение памяти в разных процедурах находятся. Ставишь в одну - он не ругается. Есть вообще нормальное средство для отслеживания утечек памяти?


Игорь Шевченко   (2003-10-15 13:34:00) [13]

Не верьте Task Manager"у. Он никогда не показывает память, которую занимает программа.


Владислав   (2003-10-15 13:26:00) [14]

Особенность.


KSergey   (2003-10-15 13:24:00) [15]

Подозреваю, что не только когда выходишь, иногда и в процессе, но не сразу - это точно.


[lamer]Barmaglot   (2003-10-15 13:06:00) [16]

Особенности менеджера. Дельфи РЕАЛЬНО освобождает память, только когда ты из неё выходишь.


Наверх

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