Witam
U¿ywam C++ Buildera. Mam nastêpuj±cy problem z b³êdem "Access volation",
który wystêpuje w momencie _zamkniêcia_ aplikacji (po wyj¶ciu z WinMain()).
Mam okno, które jest tworzone w klasie C1. Klasa C1 nie jest dziedziczona po
¿adnej klasie z VCL. Ale jej obiekt jest umieszczony w klasie g³ównego okna
F1 (jako zmienna, nie dynamicznie).
Wystêpuj± dwa warianty, w pierwszym b³±d Access Volation NIE wystêpuje (ale
jest ma³o przydatny). W pierwszym wariancie klasa C1 ma metodê M, w której
nowe okno F2 jest tworzone poprzez new, wywo³ywane ShowModal(), a nastêpnie
kasowane poprzez delete. I wszystko jest ok.
W drugim wariancie metoda M jest rozbita. Okno F2 tworzone jest w
konstruktorze klasy C1 poprzez new, kasowane poprzez delete w destruktorze,
a we wspomnianej metodzie M wywo³ywana jest tylko metoda ShowModal() tego
okna (F2). Wtedy i tylko wtedy, kiedy metoda ShowModal() bêdzie wywo³ana,
wyst±pi wspomniany b³±d (przy zamkniêciu aplikacji). Je¿eli metoda M
(defakto showModa()) nie bêdzie wywo³ana, to wszystko bêdzie dobrze (okno
jest tworzone i usuwane, i nie ma problemu).
Dodatkowo powiem, ¿e destruktor w C1 NIE jest wywo³ywany przed wyst±pieniem
b³êdu (nie dochodzi do delete F2). Ponadto adres wskazany w access volation
jest równy adresowi metody nale¿±cej do jednej z kontrolek na formie F2,
wska¼nikowi na metode DefWndProc kontrolki typu TRichEdit :-\ Zaznaczam, ¿e
wspomniana kontrolka (na razie) tylko "le¿y" na formie.
Pozdrawiam
Andrzej