wasst Opublikowano 14 Czerwca 2007 Zgłoś Opublikowano 14 Czerwca 2007 Naciśnięcie przycisku na głównej formatce uruchamia funkcję „monitor” jako nowy proces. Funkcja monitor co pewien czas (w pętli while) tworzy nowy proces wywołując funkcję „okno”. Funkcja „okno”, za każdym wywołaniem, dynamicznie tworzy nowy formularz. W tej samej chwili może być więc kilka nowoutworzonych formularzy. W celu zwolnienia pamięci, przydzielonej wcześniej nowotworzonemu oknu, przy zamykaniu nowoutworzonych formularzy w zdarzeniu „OnClose” wpisałem Action = caFree;. Zamknięcie programu powoduje błąd debugera. Przypuszczam, że jest to spowodowane nieprawidłowym zwalnianiem pamięci. Ponizej podaje kod programu. Unit1.cpp //Główne okno aplikacji//---------------------------------------------------------------------------int __fastcall okno(Pointer Parameter){ TForm2 * MyForm = new TForm2(Application); MyForm->ShowModal();}//---------------------------------------------------------------------------int __fastcall monitor(Pointer Parameter){ int a=0; while (a<3) { W_ID3 = BeginThread(NULL, 0, okno, monitor, 0, W_PD3); Sleep(5000); a++; }}//---------------------------------------------------------------------------void __fastcall TForm1::SpeedButton1Click(TObject *Sender){ W_ID1 = BeginThread(NULL, 0, monitor, this, 0, W_PD1);}//--------------------------------------------------------------------------- Unit2.cpp //Nowotworzone okna//---------------------------------------------------------------------------void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action){ Action = caFree; }//--------------------------------------------------------------------------- Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...