Zamykanie formy (Form2)

dział ogólny

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » piątek, 3 kwietnia 2009, 13:19

jaki błąd screen daj
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » piątek, 3 kwietnia 2009, 20:00

Oto zdjęci wyskakującego błędu
bez tytułu.JPG
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » sobota, 4 kwietnia 2009, 00:45

spakuj projekt mailem i mi wyślij placek2002 małpa wp.pl bo normalnie nie wierze :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » niedziela, 5 kwietnia 2009, 20:40

Witam
W formie Form1 mam (w ciele lokalnej funkcji):
Kod: Zaznacz cały
TForm2 *form_2 = new TForm2(this);
form_2->ShowModal();
delete form_2;
form_2 = NULL;

W formie Form2 mam:
Kod: Zaznacz cały
this->Free();
this->Close();

Wyskakuje mi błąd pamięci przy zamknięciu Form2. Jak można zakończyć instrukcje form_2->ShowModal() i przejść do następnej linijki?
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Cyfrowy Baron » niedziela, 5 kwietnia 2009, 20:56

musisz usunąć z Form2 polecenia this->Close() i this->Free.
Umieść w zdarzeniu OnClose dla Form2 polecenie

Kod: Zaznacz cały
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez banita » niedziela, 5 kwietnia 2009, 22:12

nie do konca poniewaz polecenie:

Action = caFree;

zawarte w zdarzeniu OnClose powoduje ze formatka po zamknieciu sama po sobie sprzata, czyli zwalnia pamiec.
co za tym idzie po wyjsciu z funkcji ShowModal nie mozesz drugi raz zwalniac pamieci po formatce.
musisz zdecydowac sie na jedno z tych rozwiazan.

osobiscie gdy wywoluje formatke modalnie to jawnie wywoluje delete xyz, natomiast gdy wywoluje ja niemodalnie to kozystam z samozwalniania pamieci w zdarzeniu onClose.

co do wywolania this->Free() to wczesniej Witold cytowal fragment manuala na ten tamat. gdybys czytal co userzy ci odpisuja nie mialbys tego problemu.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 6 kwietnia 2009, 10:06

Zacznę od początku. Żadna z powyższych odpowiedzi nie jest poprawna. Poprawne jest coś takiego:
Kod: Zaznacz cały
//Unit1.cpp
TForm2 *form_2 = new TForm2(this);
form_2->ShowModal();
delete form_2;
form_2 = NULL;
//Unit2.cpp
this->Close();

Podpowiedź autorstwa Corvisa.
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » poniedziałek, 6 kwietnia 2009, 10:59

Tak jak ci w mailu napisałem ten caly projekt ma źle zrobione zarządzanie formatkami. W miare możliwośći postaram ci sie to poprawić
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 6 kwietnia 2009, 11:14

Dynamiczne zarządzanie formatkami poprawiłem. Jest jakiś program do badania wycieków pamięci?
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez polymorphism » poniedziałek, 6 kwietnia 2009, 11:47

Miroo_007 napisał(a):
Kod: Zaznacz cały
...
delete form_2;
form_2 = NULL; <---

A to po co?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Corvis » poniedziałek, 6 kwietnia 2009, 12:56

Dynamiczne zarządzanie formatkami poprawiłem. Jest jakiś program do badania wycieków pamięci?



Project -> Optrions -> C++ Compiler -> Debugging zaznacz Enable CodeGuard options

wtedy jeżeli ci pamięć wycienie dostaniesz komunikat z informacją gdzie się to stało

Miroo_007 napisał(a):

Kod: Zaznacz wszystko
...
delete form_2;
form_2 = NULL; <---


A to po co?


Przyłączam się do pytania :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez banita » poniedziałek, 6 kwietnia 2009, 17:19

Miroo_007 napisał(a):Zacznę od początku. Żadna z powyższych odpowiedzi nie jest poprawna. ....


chyba czytasz inny temat skoro tak twierdzisz
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez Miroo_007 » poniedziałek, 6 kwietnia 2009, 17:39

polymorphism napisał(a):
Miroo_007 napisał(a):
Kod: Zaznacz cały
...
delete form_2;
form_2 = NULL; <---

A to po co?

http://www.yevol.com/en/bcb/Lesson18.htm. Temat: Customizing Dynamic Forms

Furthermore, to avoid any memory leak, you can reclaim the dynamically allocated memory by assigning NULL to the deleted object:
Kod: Zaznacz cały
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDblClick(TObject *Sender)
{
   TForm1 *Cosmos = new TForm1(this);
   Cosmos->ShowModal();

   delete Cosmos;
   Cosmos = NULL;
}
//---------------------------------------------------------------------------
Avatar użytkownika
Miroo_007
Intelektryk
Intelektryk
 
Posty: 160
Dołączył(a): sobota, 18 października 2008, 10:49
Lokalizacja: Rzeszów
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez polymorphism » wtorek, 7 kwietnia 2009, 11:25

Chyba nie do końca przeczytałeś tutora:

    In reality, since you can use your judgment to decide when the object would be displayed, when the form that owns it is closed, before deleting the dynamic object, you can first find out if the object was really created. This can be performed with a simple if statement.

    Kod: Zaznacz cały
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
       if( Fake )
       {
          delete Fake;
          Fake = NULL;
       }
    }
Czyli to zerowanie wskaźnika ma jakiś sens. W przypadku twojego kodu jest to zbędne. Tworzysz obiekt lokalnie, więc wskaźnik form_2 po przejściu tego fragmentu kodu zawsze będzie wskazywał na obiekt, który został usunięty z pamięci. A wszelkie odwoływanie się do tego wskaźnika w dalszej części kodu, bez ponownej inicjalizacji, jest błędem (którego nawet ten NULL nie załatwi 8-)).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Zamykanie formy (Form2)

Nowy postprzez usermaw » czwartek, 23 kwietnia 2009, 21:33

jesli Forma jest modalna, to sama sie niszczy przy zamykaniu i nie ma potrzeby wstawiania delete wskaznik
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
Podziękował : 2
Otrzymał podziękowań: 0
    NieznanyNieznana

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości