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: 1017Expression: _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 ??