Programmabsturz


  • Mod

    Scheint, so als ob noch irgendetwas auf ein Objekt zugreifen will, das bereits zerstört ist.
    Schau Dir doch mal den Callstack genauer an. Da siehst Du doch wer was tun möchte...



  • Hmmm? Wie kann ich das denn dort sehen??


  • Mod

    Wenn Du das Callstack Fenster hats, wird doch Zeile für Zeile augelistet, wer wen wo aufruft.



  • Ich muss jetzt erstmal rausfinden wie ich das Callstack fenster öffne 😉
    Hatte das bisher noch nicht so benutzt.



  • Ahja die Aufrufliste hab ich jetzt gefunden.
    Wo muss ich nun einen Haltepunkt setzen?
    Und wie sehe ich dort was noch aufgerufen wird?
    Werde nicht schlau aus dem Code.


  • Mod

    Da musst Du keinen Haltepunkt setzen. Wenn es kracht kannst Du hier durch Doppelklick einfach sehen wer wen wann aufruft...

    Wo kracht es nun? Bei einem Destruktor vermute ich mal!



  • Hier zeig ich dir jetzt mal die Aufrufliste, die erscheint wenn es kracht.
    Vielleicht könntest du mir bitte erklären wie ich darazs sehe, wer wen aufgerufen hat.
    ntdll.dll!7c901230()
    ntdll.dll!7c96c943()
    ntdll.dll!7c949eb9()
    > mfc71d.dll!CThreadSlotData::GetThreadValue(int nSlot=14837864) Zeile 269 C++
    mfc71d.dll!CThreadSlotData::GetThreadValue(int nSlot=3) Zeile 269 C++
    mfc71d.dll!CThreadLocalObject::GetData(CNoTrackObject * (void)* pfnCreateObject=0x7c29dc40) Zeile 414 + 0x11 C++
    mfc71d.dll!CThreadLocal<AFX_MODULE_THREAD_STATE>::GetData() Zeile 177 + 0xd C++
    mfc71d.dll!AfxGetModuleThreadState() Zeile 243 C++
    0012e1b8()
    mfc71d.dll!CMapPtrToPtr::GetValueAt(void * key=0x002203fe) Zeile 185 + 0xc C++
    mfc71d.dll!CHandleMap::LookupPermanent(void * h=0x002203fe) Zeile 116 + 0x16 C++
    mfc71d.dll!CWnd::AssertValid() Zeile 888 + 0xf C++
    mfc71d.dll!CView::AssertValid() Zeile 500 C++
    mfc71d.dll!CFormView::AssertValid() Zeile 272 C++
    Par.exe!CParView::AssertValid() Zeile 1978 C++
    0000000a()
    ntdll.dll!7c96d6aa()
    user32.dll!77d4882a()
    user32.dll!77d4c63f()
    ntdll.dll!7c949d18()
    mfc71d.dll!CWnd::DefWindowProcA(unsigned int nMsg=1238036, unsigned int wParam=2082654585, long lParam=32) Zeile 1024 + 0x20 C++
    mfc71d.dll!CThreadLocal<_AFX_THREAD_STATE>::GetData() Zeile 177 + 0xd C++
    00000001()
    user32.dll!77d4d4ee()



  • Hab mein Problem immer noch nicht gelöst.
    Kann mir denn niemand helfen??



  • Wenn innerhalb der Methode "CMainFrame::OnViewDisplay()" ein Fenster erzeugt wird, dann sollte es seine eigene Warteschleife haben :

    // statt :
    
    while (::PeekMessage(&Msg, NULL,0,0,PM_NOREMOVE)) 
    { 
      if (!AfxGetApp()->PumpMessage()) {::PostQuitMessage  (0); break;} 
    } 
    
    // probier mal :
    
    while (::PeekMessage(&Msg, NULL,0,0,PM_REMOVE)) 
    { 
     ::TranslateMessage (&Msg);
     ::DispatchMessage  (&Msg);
    }
    


  • hmm, mal ausprobieren.



  • Nö, das funktioniert auch nicht!!!


Anmelden zum Antworten