Application Error po zamknięciu programu

0

Mam problem z namierzeniem, dlaczego po zamknięciu programu wyskakuje mi EAccessViolation, spowodowany Read of address...
Jak szukać przyczyny ?
Ostatnią wykonywaną procedurą jest TForm.onClose, po wykonaniu wraca do ostatniej linii kodu "end." i... tu wyskakuje error.
Error wylatuje i pod IDE i po skompilowaniu i uruchomieniu samodzielnie. Program w D7.

Jak się do tego zabrać ?

0

Prawdopodobnie gdzies nie zwalniasz pamieci. Czy uzywasz klasy TThread? Pokaz kod abysmy mogli zobaczyc co i jak ...

0

nie używam TThread, kod jest ogromny, będzie ciężko.
Do tej pory nie miałem takich przygód...
To może jak coś takiego przejąć ?

0

Zalezy co masz uruchomione. Jesli to jest glowna formatka ktora zamykasz to problem lezy prawdopodobnie na ktorejs z formatek ktore sa uruchamiane przy starcie programu. Jesli np wywolujesz jakas inna formatke i blad wtedy sie pojawia to prawdopodobnie na tamtej formatce jest jakas operacja ktora po close dalej chce cos robic ... mozliwosci jest mnostwo ustaw sobie brakepointa na onClose i sprobuj dojsc do tego gdzie sie sypie

0

Właśnie na tym polega problem. To się sypie już PO onClose. Po end (z kropką :-))

0

a co masz w destroy formy?

takie błędy możesz mieć jak masz timer, port COM, wątek, gniazda i generalnie wszystko co generuje zdarzenia na podstawie danych z poza aplikacji

0

No i sprawa się wyjaśniła. :-)

Pomijam sprawę niewystarczającego destruktora (kosmetyczną w zasadzie).

Geneza:
Otóż: klasa TSlownik miała var slownik: TSlownik jako public w formX: TForm.
Następnie było sobie gdzieś tam slownik := TSlownik.Create (...);
Ten obiekt był kilka razy tworzony i niszczony w innych oknach, ale zawsze było ok, dbałem o higienę tego obiektu.
Problem pojawił się, kiedy przy zamykaniu aplikacji, formX był niszczony przed innymi, które ciągle mogły korzystać z var slownik.

Podsumowując, dzięki woolfikowi zagłębiłem się w destruktor, a dzięki przejęciu onDestroy każdej z form zauważyłem problematyczną kolejkę niszczenia form.

Rozwiązanie:
Rozwiązaniem okazało się przeniesienie var slownik z członka obiektu TForm na obiekt, który istnieje do samego końca.

Dzięki wielkie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1