Verständisfrage



  • Abend
    Ich habe nun nach 4h debuggen nen ganz komischen Fehler gefunden. Mein Programm besteht aus einem MultiDoc Template.
    Folgendes führte zum Fehler
    Neues Angebot > Artikel hinzufügen > OK > Speichern
    Da funtzte noch alles. Dann wollte ich das ganze öffnen - 100% Systemlast, alles abgekackt.
    Es stellte sich heraus, dass der Fehler im Dialog war, der im Angebotöffnen nie vorkam - einzige Gemeinsamkeit zwischen Erstlellen und Öffnen ist das CFrameWnd.

    CMDIFrameWnd* pMainWnd = (CMDIFrameWnd*)AfxGetMainWnd();    
    CMDIChildWnd* pChild = (CMDIChildWnd*)pMainWnd->MDIGetActive();
    ((CWordChildFrame*)pChild)->m_bSelect = false;
    

    altes (funktioniert nicht)

    CWnd* pWnd = GetParent();  //ist sowieso falsch - es kommt aber kein ASSERT
    ((CWordChildFrame*)pWnd)->m_bSelect = false;
    

    Wie kann das setzen einer BOOL Variable das Programm abkacken lassen????????
    Die BOOL Variable wird beim Öffnen nie benötigt!?!? Ist da durch den falschen Pointer der Speicher beschädigt?

    Danke, mfg



  • 2 Möglichkeiten:

    1.) pChild bzw. pWnd sind wirklich invalide Pointer (nach deinem Beispiel NULL
    Pointer), dann darfst du selbstverständlich nicht damit arbeiten.

    2.) pChild bzw. pWnd sind nicht vom Typ CWordChildFrame*. Dann ist dein static
    cast falsch und es rumpelt ebenfalls.

    such Dir eine aus oder beschreibe dein Problem mal ein bisschen aussagekräftiger.



  • Ich hab mein Problem echt schlecht beschrieben *g*

    CMDIFrameWnd* pMainWnd = (CMDIFrameWnd*)AfxGetMainWnd();    
    CMDIChildWnd* pChild = (CMDIChildWnd*)pMainWnd->MDIGetActive();
    ((CWordChildFrame*)pChild)->m_bSelect = false;
    

    Diese Methode funktioniert. Der Dialog wird aus dem CFrameWnd heraus aufgerufen. Der obige Code befindet sich in OnInitialDIalog.
    Was ich nur komisch gefunden habe ist, dass durch den fehlerhaften Pointer andere Werte des Programmes verändert wurden und das es dann zum Absturtz gekommen ist.

    mfg


Anmelden zum Antworten