Wieder mal Debug Assertion failed...



  • Hi,

    Ich hab zwar keine Frage zur MFC, mehr zu Visual C++. Mein Programm verursacht o.g. Fehler (genauer:
    File: dbgheap.c
    Line: 1017

    Expression: _BLOCK_TYPE_IS_VALID(pHead.>nBlockUse)
    ).
    Und zwar hab ich ein dynamisches Feld: lpSprList. Über eine weitere Variable iAnzSprList wird festgelegt, wie groß dieses Feld ist. Ist jetzt iAnsSprList == 0 und ich möchte infolgedessen lpSprList freigeben, kommt der Fehler oben (nicht wenn ich versuche, danach auf lpSprList zuzugreifen (also keine Zugriffsverletzung) ).

    Hier die Funktion.

    BOOL momSpriteListe_EintragLoeschen(LPMOM_LEVELPROJEKT lpAktuellesProjekt, int iIndexSpr)
    {
    	int							i;
    	LPMOM_SPRITE				lpSpriteTmp;
    
    	lpAktuellesProjekt->Level.iAnzSpr--;
    
    	if(lpAktuellesProjekt->Level.iAnzSpr == 0)
    	{
    	free(lpAktuellesProjekt->Level.lpSprListe);  // HIER KLINGELT'S !!!
    	lpAktuellesProjekt->Level.lpSprListe = NULL;
    
    		return TRUE;
    	}
    
    // DER VOLLSTÄNDIGKEIT HALBER NOCH DER REST DER FUNKTION:
    	lpSpriteTmp		= (LPMOM_SPRITE) calloc(sizeof(MOM_SPRITE),lpAktuellesProjekt->Level.iAnzSpr);
    		if(!lpSpriteTmp) return FALSE;
    
    	i = iIndexSpr;
    	while( i < (lpAktuellesProjekt->Level.iAnzSpr) )
    	{
    		lpAktuellesProjekt->Level.lpSprListe[i] = lpAktuellesProjekt->Level.lpSprListe[i+1];
    		i++;
    	}
    
    	for(i = 0; i < lpAktuellesProjekt->Level.iAnzSpr; i++)
    	{
    		lpSpriteTmp[i]	= lpAktuellesProjekt->Level.lpSprListe[i];
    	}
    
    	free(lpAktuellesProjekt->Level.lpSprListe);
    	free(lpAktuellesProjekt->lpPfadTab);
    
    	lpAktuellesProjekt->Level.lpSprListe	= lpSpriteTmp;
    	lpAktuellesProjekt->lpPfadTab			= lpPfadTabTmp;
    
    	return TRUE;
    }
    


  • Sorry, es gab einen Fehler beim Frstellen des Feldes (in einer anderen Funktion). Jetzt klappts... kann jemand diesen Thread löschen :p ??


Anmelden zum Antworten