Problem beim Anzeigen und Zerstören eines Dialog



  • Mein Problem entsteht beim Zerstören(Beenden) des Dialogs
    Der Code ist der folgende (Anzeigen und Beenden sind Buttons auf einem dem Dialog des Hauptfensters). m_pDlgPhaseOutput ist der Dialog der angezeigt und beendet werden soll.

    void CTestPhasePPMDlg::OnBnClickedButtonStartOutput()
    {       
        if (theApp.m_pDlgPhaseOutput != NULL) {
            theApp.m_pDlgPhaseOutput->SetForegroundWindow();
            theApp.m_pDlgPhaseOutput->SetFocus();
        }
        else {       
            theApp.m_pDlgPhaseOutput = new CDlgPhaseOutput;
            theApp.m_pDlgPhaseOutput->Create(CDlgPhaseOutput::IDD);               
            // Ausgabe initialisieren       
            theApp.m_pDlgPhaseOutput->ShowWindow(SW_SHOW);   
        }   
    }
    
    void CTestPhasePPMDlg::OnBnClickedButtonEndOutput()
    {
        if (theApp.m_pDlgPhaseOutput != NULL)
        {
            theApp.m_pDlgPhaseOutput->DestroyWindow();
            delete theApp.m_pDlgPhaseOutput;
        }
    }
    

    Der Code zeigt den Dialog an (erste Button), und beendet ihn (zweite Button, zweite Funktion). Wenn ich danach jedoch wieder den Dialog anzeigen möchte, dann
    stürzt die Application ab, weil der Pointer theApp.m_pDlgPhaseOutput nicht Null ist.

    Mache ich etwas prinzipielles falsch ?

    Matthias



  • Du musst den Zeiger selbst auf NULL setzen, delete macht das nicht für dich.



  • delete löscht zwar das Objekt, auf das der übergebene Zeiger verweist, fasst ihn selber jedoch nicht an. Wenn du noch mit dem Zeiger arbeiten willst, solltest du ihn selber auf NULL setzen, nachdem du ihm seine Daten weggenommen hast.

    PS: sfds 😉


Log in to reply