dbgheap.c



  • Wo finde ich die dbgheap.c Datei?

    Bekomme zur Laufzeit meiner Anwendung im Debug-Modus folgende Meldung:

    Debug Assertion Failed!

    dbgheap.c Line: 1409

    Expression: _pLastBlock == pHead

    Weiß nicht wie ich damit umgehen soll. Im Release-Mode läuft alles prima.



  • gartenkralle_deluxe schrieb:

    Wo finde ich die dbgheap.c Datei?

    Die Datei hilft dir nicht, der Fehler liegt in deinem Code. Du hast dir irgendwo den Heap zerschossen.

    gartenkralle_deluxe schrieb:

    Im Release-Mode läuft alles prima.

    Zufall. Im Release-Mode werden diese Prüfungen entfernt. Damit ist nur die Diagnose weg, nicht das Problem.



  • //switch(view)
    	//{
    	//	case profileView:
    	//		if(elements.size()!=0 && (elements.at(0)->vertex->y == vertex_U.w) && (elements.at(0)->vertex->z == vertex_U.s))
    	//			return;
    	//	break;
    
    	//	case frontView:
    	//	case backView:
    	//		if(elements.size()!=0 && (elements.at(0)->vertex->x == vertex_U.w) && (elements.at(0)->vertex->y == vertex_U.s))
    	//			return;
    	//	break;
    
    	//	case topView:
    	//	case bottomView:
    	//		if(elements.size()!=0 && (elements.at(0)->vertex->x == vertex_U.w) && (elements.at(0)->vertex->z == vertex_U.s))
    	//			return;
    	//	break;
    	//}
    
    	Element *element = new Element();		
    	Global::constElement++;
    
    	element->circle = 0;
    	element->vertex = new Vertex();
    	Global::constVertex++;
    	element->type = vertexType;
    
    	switch(view)
    	{
    		case profileView:
    			element->vertex->x = 0.0;
    			element->vertex->y = vertex_U.w;
    			element->vertex->z = vertex_U.s;
    		break;
    
    		case frontView:
    		case backView:
    			element->vertex->x = vertex_U.w;
    			element->vertex->y = vertex_U.s;
    			element->vertex->z = 0.0;
    		break;
    
    		case topView:
    		case bottomView:
    			element->vertex->x = vertex_U.w;
    			element->vertex->y = 0.0;
    			element->vertex->z = vertex_U.s;
    		break;
    	}
    
    	elements.push_back(element);
    	elementsType.push_back(vertexType);
    

    Mit diesem Code läuft alles prima, auch im Debug. Wenn ich allerdings mit den auskommentierten Zeilen übersetze kommt der Fehler...



  • gartenkralle_deluxe schrieb:

    Wenn ich allerdings mit den auskommentierten Zeilen übersetze kommt der Fehler...

    Mag sein, ist aber egal. Der Fehler kann überall in deinem Code stecken.



  • Wie kann ich dann den Fehler finden, wenn er überall stecken kann?



  • Indem du deinen gesamten Code prüfst. Solche Fehler werden üblicherweise durch Überschreitung von Arraygrenzen oder uninitialisierte Variablen verursacht.



  • Aber warum bekomm ich den Fehler nicht wenn die Zeilen auskommentiert sind?



  • Oder den Debugger benutzen. Diese "Debug Assertion Failed!"-Meldungen beinhalten normalerweise Debug-Breakpunkte.



  • gartenkralle_deluxe schrieb:

    Wie kann ich dann den Fehler finden, wenn er überall stecken kann?

    Viele Dinge kann man durch Profiler wie valgrind, Purify etc. finden. Die warnen einen, wenn man z.B. über Arraygrenzen hinausschreibt.



  • gartenkralle_deluxe schrieb:

    Aber warum bekomm ich den Fehler nicht wenn die Zeilen auskommentiert sind?

    weil das verhalten undefiniert ist. vielleicht bekommst du ihn beim nächsten mal probieren doch, vielleicht läuft aber auch alles glatt - nur verlassen solltest du dich nicht darauf.


Log in to reply