Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

утечки памяти. Помогите, пожалуйста   Найти похожие ветки 

 
Dy1   (2008-07-23 14:40) [0]

пытаюсь уничтожить форму, а она мой дух не отпускает :(
часть кода убрал
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
var Mouse: TMouseEventData;
begin
LoadIni;
DFind( TV.TVInsert( TV.TVRoot, 0, ExcludeTrailingPathDelimiter(PathStalk)), PathStalk);
end;

procedure TForm1.LoadIni;
var
ini: PIniFile;
OD: POpenDirDialog;
x: integer;
begin
if FileExists(GetStartDir + "settings.ini") Then
и т.п.

if not DirectoryExists( PathStalk + "\gamedata\sounds\")then
begin
  OD := NewOpenDirDialog("", [odEditBox, odNewDialogStyle]);
  OD.InitialPath := "C:\";
  Repeat
    if OD.Execute Then
      PathStalk := OD.Path
    Else
    begin
      Form.Close; // как правильно в этот момент закрыть программу?
    end;
  Until DirectoryExists( PathStalk + "\gamedata\sounds\");
  OD.Free;
end;
end;

function TForm1.KOLForm1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
var
Filename: array [0..259] of char;
Count, i, n: Cardinal;
fname, STpath: string;
Mouse: TMouseEventData;
begin
if msg.message = 563 Then
begin
  Result := False;
  Count := DragQueryFile( msg.WParam, $FFFFFFFF, Filename, SizeOf(Filename));

  for i := 0 to Count - 1 do
  begin
    DragQueryFile( msg.WParam, i, Filename, SizeOf(Filename));
    fname := ExtractFileName(string(Filename));
    if LV.LVIndexOf(fname) >= 0 Then // если найдено
    begin
      STpath := IncludeTrailingPathDelimiter(TV.TVItemPath(TV.TVSelected, "\"));
      n := 0;
      While LV.LVIndexOf(fname + ".bak" + int2str(n) ) >= 0 Do
        n := n + 1;
      CopyMoveFiles( STpath + fname, STpath + fname + ".bak" + int2str(n), True);
      CopyMoveFiles( string(Filename), STpath + fname, False);
    end;
  end;
  DragFinish(Msg.WParam);
  Result := True;
end;
end;


 
exero ©   (2008-07-23 14:54) [1]

Перед Form.Close добавь OD.Free;
В обработчике сообщений для необрабатываемых сообщений Result := False;


 
Dy1   (2008-07-23 15:00) [2]

Result := False стоИт, перед Form.Close добавлял OD.Free - глючит, лучше как есть.
У меня такое ощущение, что после вызова Form.Close создание формы продолжается дальше. Кстати Form.Destroy вообще непонятно когда вызывается, даже от фазы Луны не зависит.


 
exero ©   (2008-07-23 15:20) [3]

В упор не вижу что Result := False в KOLForm1Message, для сообщений отличных от 563


 
MTsv DN   (2008-07-23 16:23) [4]

if msg.message = 563 Then
begin
 Result := False;

->
Result := False;
if msg.message = 563 Then
begin


 
Dy1   (2008-07-24 13:23) [5]

там исправил.
запускаю прогу, жму отмену. Окно исчезает, процесс висит в памяти


 
MTsv DN   (2008-07-24 14:04) [6]

if not DirectoryExists( PathStalk + "\gamedata\sounds\")then
begin
 OD := NewOpenDirDialog("", [odEditBox, odNewDialogStyle]);
 OD.InitialPath := "C:\";
 Repeat
   if OD.Execute Then
     PathStalk := OD.Path
   Else
   begin
     Form.Close; // как правильно в этот момент закрыть программу?
   end;
 Until DirectoryExists( PathStalk + "\gamedata\sounds\");
 OD.Free;
end;
end;

Странно, я мож че не понимаю, а при чем тут KOL. Элементарно неправильный код...

Варианты:
1. Form.Close; // как правильно в этот момент закрыть программу
->
OD.Free;
Form.Close;
exit;

2. Form.Close; // как правильно в этот момент закрыть программу
->
OD.Free;
SendMessage(Form.Handle, WM_CLOSE, 0, 0);
exit;

3. Form.Close; // как правильно в этот момент закрыть программу
->
OD.Free;
halt;


 
Boguslaw   (2008-08-15 19:10) [7]

Maybe someone is willing to help me convert MemCheck to KOL ? I have a compilable version but it seems to not working as should. Vladimir ?


 
exero   (2008-08-15 21:31) [8]

FastMM4 - наш выбор ))


 
Dy1   (2008-08-21 22:48) [9]

exero, как будто FastMM4 сам всё правильно сделает и заменит программиста :/ :)


 
exero   (2008-08-22 06:23) [10]


> FastMM4 сам всё правильно сделает и заменит
> программиста :/ :)

неужели я где-то подобное мог написать? Просто если не использовать FastMM4 и FastMove то Delphi (до определенных версий) - унылое говно в плане производительности. И что такое может MemCheck (насколько я помню - тупо показывает утечки) чего не может FastMM4?
А для новых разработок .Net или Java (первый для той ниши которую занимал delphi, предпочтительнее), только обязательно хотя бы рихтера прочтите - и кроме необходимости таскать framework и простого дизассемблирования минусов вроде не замечено.



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.057 c
2-1269956469
sanya
2010-03-30 17:41
2010.08.27
Экспорт данных в StringGrid


2-1269581230
Игорь Р.
2010-03-26 08:27
2010.08.27
Opera и Delphi


11-1216886396
rainstuff
2008-07-24 11:59
2010.08.27
Отключение дисплея


15-1265202233
БарЛог
2010-02-03 16:03
2010.08.27
Нарисовать график


11-1217821090
L`Autour
2008-08-04 07:38
2010.08.27
Как установить ширину PopupMenu при OwnerDraw = True