Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » fehler beim beenden des programms...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.03.2004, 15:55 Uhr
~toxic
Gast


hallo, ich hab eine nonmodale-dialoganwendung welche minimiert bzw. im systray gestartet wird, soweit funktionierte auch alles. jetzt habe ich in den dialog ein paar registerkarten ( laut der hervorragenden anleitung der FAQ ) eingebaut und seit dem bekomme ich einen ausnahmefehler beim beenden des programms.
C++:
LRESULT CWnd::Default()
{
    // call DefWindowProc with the last message
    _AFX_THREAD_STATE* pThreadState = _afxThreadState.GetData();
    return DefWindowProc(pThreadState->m_lastSentMsg.message,
/* genau hier */    pThreadState->m_lastSentMsg.wParam, pThreadState->m_lastSentMsg.lParam);
}

da es ein nonmodaler DLG ist beende ich das prog mit "DestroyWindow();"
und führe dann im "::PostNcDestroy()" ein "delete this" durch welches auch den destuctor der registerkarten aufruft, unmittelbar danach kommt dann der fehler. wenn ich das "delete this" weglasse bekomm ich keinen fehler aber eben memory-leaks...

wie bekomm ich raus was den fehler verursacht ? bin echt ratlos da ich nicht weiss wer den fehler produziert, muss ich da was von hand löschen ? oder greift noch irgendein programmteil auf freigegebenen speicher zu ? wie bekomm ich das raus ?
--
gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.03.2004, 18:12 Uhr
mike
Pinguinhüpfer
(Operator)



Zitat:
wie bekomm ich raus was den fehler verursacht ?

Dafür gibts den Debugger Einfach mal "Debuggen bis Cursor" und mit F10 weiterspringen. Dann solltest du den Fehler ziemlich eingrenzen können.

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.03.2004, 19:50 Uhr
~toxic
Gast


iss schon klar, aber der fehler taucht ja erst auf wenn die "letzte zeile" des programms verarbeitet wurde, also befindet sich der fehler doch nicht mehr unbedingt in meinem eigenen code ! oder ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.03.2004, 20:01 Uhr
mike
Pinguinhüpfer
(Operator)


Des heißt nicht viel. Das komischste Bsp. das ich jemeils gesehen habe war, dass während des Programms ein BOOL Pointer auf die falsche Speicheradresse gezeigt hat. Beim Beenden des Programms kam auch immer ein Lesefehler - war auch nicht mehr in meinem Code.
Ich würde vor dem Aufrufen von DefWindowProc auf NULL Pointer prüfen (obwohl ich nicht denke, dass welche vorhanden sind). Falls du keine NULL Pointer hast, übergibst du DefWindowProc eventl. falsche Params. Kann man aus der Ferne schlecht sagen.

Zitat:

wenn ich das "delete this" weglasse bekomm ich keinen fehler aber eben memory-leaks...


Poste mal die Codestelle

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.03.2004, 13:52 Uhr
~toxic
Gast


hi, also da kann ich nicht viel posten... wie gesagt, iss ein nonmodaler DLG, und wird mit DestroyWindow() beendet, welches dann eben diese function aufruft:
C++:
void CRegisterDlg::PostNcDestroy()
{
    PostQuitMessage(0);
    delete this;
}

ich vermute da mal, das es mit den inhalten der registerkarten zusammenhängt, sind ja schliesslich auch dialoge... muss ich die dann auch "von hand" beenden ?
da der fehler wie gesagt dann auftritt nachdem der destructor der registerkarten-klasse aufgerufen wurde.
iss halt mein erstes project mit registerkarten :
--
gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.03.2004, 16:27 Uhr
mike
Pinguinhüpfer
(Operator)


Es ist schwer zu sagen was da nicht stimmt. Eventl. ist das delete this auch schuld dran.
Ich kann dich in diesem Fall leider nur auf folgende Howtos weiterleiten:
www.fun-soft.de/showtopic.php?threadid=1327
www.codeproject.com/dialog/AndLawtabsetdlg.asp
www.codeproject.com/property/hacking_the_cpropertyshee.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_MFC_CPropertyPage.asp

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.03.2004, 11:41 Uhr
ao

(Operator)



Zitat:
~toxic postete
iss schon klar, aber der fehler taucht ja erst auf wenn die "letzte zeile" des programms verarbeitet wurde, also befindet sich der fehler doch nicht mehr unbedingt in meinem eigenen code ! oder ?


Doch, wahrscheinlich schon. Abstürze beim Zerstören von Objekten sind fast immer selbstgebaut, es ist sehr unwahrscheinlich, dass du einen Fehler in einer der Bibliotheken aufgedeckt hast.

Zum Reindebuggen in die Destruktoren nimmt man nicht F10, sondern F11.

ao

Dieser Post wurde am 15.03.2004 um 11:42 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.03.2004, 17:53 Uhr
~toxic
Gast


hallo, ich glaub auch nicht das der fehler in einer libs ist, der iss schon hausgemacht,... aber wie und wo ????

ich hab da praktisch 2 anwendungen miteinander kombiniert die eine war halt ein dialog mit den registerkarten ( aus der FAQ ) und die andere ein modeless dlg der minimiert im systray gestartet wird, beide dialoge laufen allein ohne fehler und leaks, nur die kombination hat halt diesen fehler, den ich meiner meinung darauf zurückführe das ja der modeless dlg nicht mit OnOK (bzw OnClose) geschlossen wird, sondern eben mit DestroyWindow und dem "delete this".
destruktoren giebt es eigentlich nur einen, & zwar den von MyTabCtrl (aus der FAQ)

ich glaub noch nicht mal das es an den registerkarten liegt, hab aber trotzdem mal versucht die "windowseigenen" CPropertySheet & CPropertyPage zu benutzen, aber der macht mir einen neuen dlg auf und als child bekomm ichs irgendwie nicht hin, bzw nicht angezeigt... keine ahnung was ich da falsch mache :/ muss eben noch viiiiiiel lernen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.03.2004, 20:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wenn du willst kannste mir das projekt auch mal schicken, ohne debug und release ordner und ohne binary, als zip oder rar-archiv an hilfe at flo-soft dot de
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.03.2004, 22:24 Uhr
~toxic
Gast


hat jemand ein gutes beispiel für ein dlg welcher minimiert im systray startet ? irgendwo iss da bei mir der "wurm" drin, m_pMainWnd ist irgendwann null, bzw wird nicht initialisiert und dann giebts den fehler.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: