Beschädigung des Heaps?



  • Hi all
    beim ausführen meines Programms kommt dieser Fehler:
    Was könnte das problem sein?
    Da ich keine Ahnung habe wo das Problem liegt kann ich keinen Code posten!

    Windows hat einen Haltepunkt in SDL_Test.exe ausgelöst.
    
    Dies kann auf eine Beschädigung des Heaps zurückzuführen sein, die auf ein Problem in SDL_Test.exe 
    oder in einer der geladenen DLLs hinweist.
    
    Dies kann auch darauf zurückzuführen sein, dass der Benutzer F12 drückt, während SDL_Test.exe den Fokus hat.
    
    Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
    

    Danke im V_o_r_a_u_s
    Mfg
    greece57

    P.S.: Falls ihr code braucht sagt bescheid UND ich habe Nicht F12 gedrückt^^ 😉

    -----------------------------EDIT-------------------------------

    Könnte es vielleicht hierran liegen:

    while (it != m_ShotList.end ())
      {
    	  	it->Update ();
        // Schuss updaten
    	  if (it->IsAlive() )
    	  {
    		it->Render ();
    		it++;
    	  }
    	  else
    	  {
    		  cout << "Asdf";
    		  m_ShotList.erase (it);
    		  it++;
    	  }
      }
    

    Aja wenn ich die Zeile

    it++;
    

    nach

    m_ShotList.erase (it)
    

    weggelasse kommt der gleiche fehler nur haut er micht an einer anderen Zeile raus:

    m_pSpriteQuitButton->Render (m_fAnimPhaseQuitButton);
    

    lass ich die Zeile weg haut er mich hier raus:

    m_pSpriteOberflaeche->Render (m_fAnimPhase);
    

    Danke fuer ne Antwort



  • Du hast wahrscheinlich Zeiger falsch angewandt. Zum Beispiel wilde/nicht initialisierte/auf nicht mehr existente Objekte verweisende Zeiger.

    Schau mal, wo der Debugger stecken bleibt. Falls du da nicht gerade etwas findest, dann bereite dich auf eine mühsame Fehlersuche vor. Der Fehler kann irgendwo auftreten, und sich erst viel später bemerkbar machen.

    Am besten prüfst du mit dem Debugger die Variablen (besonders Zeiger) während des Programmablaufs auf Gültigkeit.



  • m_ShotList.erase (it); 
    it++;
    

    besser wäre

    it=m_ShotList.erase (it);
    


  • Das Problem mit dem Debuger.
    Er funktioniert nicht mehr
    siehe hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-234623.html

    ALLERDINGS 😃 😃
    der vorschlag:

    it=m_ShotList.erase (it);
    

    hat funktioniert
    VIELEN DANK HIERFÜR
    (Falls jemand eine Idee zu meinem Debuger hat bitte melden 🙂 danke)


Anmelden zum Antworten