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

Вниз

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

 
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 вся ветка

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

Наверх





Память: 0.47 MB
Время: 0.057 c
2-1273339176
sako
2010-05-08 21:19
2010.08.27
азерб. шрифт


2-1273938530
SIV5000
2010-05-15 19:48
2010.08.27
Окна


2-1273203002
rodion
2010-05-07 07:30
2010.08.27
Динамическое програмирование. Подпалендром.


2-1273316321
FIL-23
2010-05-08 14:58
2010.08.27
как добавить поле в индифицирующую колонку


4-1234818468
istok
2009-02-17 00:07
2010.08.27
проблема с CoShellWindows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский