Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];

Вниз

FastMM непонятно прав он или нет   Найти похожие ветки 

 
ford ©   (2009-05-12 01:48) [0]

Всем доброго времени суток
Вот поставил в проекте FastMM дабы проверить утечки памяти
ругается он жутко на вот такую вещь:

в ондной из процедур основного модуля программы, я выделяю память и передаю указатель другой процедуре
примерно вот так
Var p:^Int64;
....
new(p);
p^:=1;
wr.AppendRec(SrcIndex,p);
...


где wr - объект класса и AppendRec собственно его метод
весь класс приводить смысла нет наверное (тем более он большой)
но основная его работа заключается в следующем:
у него есть массив структур где, струтктура имеет поле индескса и указатель типа Pointer;
метод AppendRec, заполняет новую структуру в этотом массиве, и полю структуры, присваивает собственно переданный pointer

Procedure TBuffer.AppendRec(Ind:Integer; Data:Pointer);
Begin
fdata[LastEl].Index:=Ind;
fData[LastEl].Data:=Data;
Inc(LastEl);
End;

есть также другие методы которые возвращают указатель из струтуры сохраненной в элементе массива.... и т.д.
но суть не в этом :)

деструктор в классе
делает следующее
for i:=1 to LastEl do
Begin
 If (fdata[i].Data<>nil) Then
   Begin
     FreeMem(fData[i].Data);
   End;
End;
Inherited;


т.е. я честно ежели поле Data<>nil освобождаю эту память

а вот FastMM ругается и говорит что ту память которую я выделил в строке
new(p);
нифига я не освободил

кто прав?? :)


 
ford ©   (2009-05-12 02:36) [1]

блин прав fastMM
:)
не ту строку посмотрел
в процедуре был вызов другой функции результат которой просто 1 или -1
а вот в ней как раз таки и было выделение памяти
т.е. перед New
стояло
IF Present(SrcIndex)=-1 Then
Begin
New(p);

:)
обсчитался строками


 
Игорь Шевченко ©   (2009-05-12 02:54) [2]

Офигенное ООП. Руки отрывать


 
brother ©   (2009-05-12 06:09) [3]

может, для начала, исправить мозг?


 
Andy BitOff ©   (2009-05-12 09:35) [4]

fastMM всегда прав!
Даже тогда, когда на:
.dpr
var
 s: string;
begin
 SplashImagePath := ExtractFilePath(ParamStr(0)) + "img\";
end;

Говорит, что;
Блок памяти был выделен и не освобожден. Размер: 68

This block was allocated by thread 0xB18, and the stack trace (return addresses) at the time was:
402DA8 [System][@GetMem]
7C817067 [Unknown function at RegisterWaitForInputIdle]

Блок в настоящее время используется для объекта класса: Unknown

Выделенный номер стал: 2666

Текущий дамп памяти из 256 байт начиная с адреса 7FF7CBE0:
...

В этом приложении происходят утечки памяти. Утечки блоков маленького размера (исключая ожидаемые утечки зарегистрированные по указателю):

53 - 68 байт: AnsiString x 1


 
Тимохов_   (2009-05-12 15:37) [5]

FastMM прав.

судя по приведенной информации ошибки вроде нет.

однако на будущее не надо брать через new, а отдавать через freemem, надо отдавать через dispose, причем тип указателя должен быть такой же как и при получении, иначе если будут в освобождаемой памяти строки (ну это не твой случай), то будут ошибки.

может у тебя fData от 0, а не от 1 индексируется?



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.07.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1242997016
cyber-pilot
2009-05-22 16:56
2009.07.12
Директива inline


2-1242651148
Wadim005
2009-05-18 16:52
2009.07.12
Как организовать поиск текста по шаблону?


2-1242837940
Dr.Andrew
2009-05-20 20:45
2009.07.12
Как строку short *s=(short*)buffer можно перевести на делфи?


15-1242320026
VoznikVopros
2009-05-14 20:53
2009.07.12
Где можно взять красивые иконки для базы данных?..


2-1242709063
Rimdus
2009-05-19 08:57
2009.07.12
TAdoConnection в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский