Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » "debug assertion failed" bei delete

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.11.2006, 13:56 Uhr
DerSven



Hallo,

ich bekomme bei einem delete Aufruf immer eine "debug assertion failed".

Die Klasse in der das Auftritt hab ich erfolgreich mit nem Konsoleprogramm getestet (Kompiliert mit GCC) und wollte mit MSVC++ ne GUI drumstricken.

Da der Fehler vorher nicht aufgetreten ist, hab ich ein wenig rumprobiert und mir ein kleines Testprogramm gemacht.


C++:
struct ROW
{
    int count;
    unsigned char *r;
    unsigned char *g;
    unsigned char *b;
    
};



C++:
    int i_BitmapWidth = 60;
    int i;
    int i_BitmapHeight = 20;

    ROW *ca_PixelData = new ROW[ i_BitmapHeight ];

    for (i = 0; i < i_BitmapHeight; i++)
    {
        ca_PixelData[i].count = i_BitmapWidth;
        
        ca_PixelData[i].r = new unsigned char[ i_BitmapWidth ];
        memset( ca_PixelData[i].r, 0, i_BitmapWidth );
        
        ca_PixelData[i].g = new unsigned char[ i_BitmapWidth ];
        memset( ca_PixelData[i].g, 0, i_BitmapWidth );
        
        ca_PixelData[i].b = new unsigned char[ i_BitmapWidth ];
        memset( ca_PixelData[i].b, 0, i_BitmapWidth );
        
    }

    for (i = i_BitmapWidth - 1; i >= 0; i--)
    {
        delete[] ca_PixelData[i].b;
        delete[] ca_PixelData[i].g;
        delete[] ca_PixelData[i].r;
    }
    
    delete[] ca_PixelData;



Wenn ich das mit GCC ausführe läufts anstandslos (Hab zum testen mal absichtlich vor dem delete mit dem Array in unzulässige Bereiche geschrieben und da meldet sich natürlich Windows).

In MSVC++ wird der code ausgeführt wenn ich auf ein Button drücke und ich erhalte dann diese schöne "debug assertion failed"-Meldung:

---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: ...ata\workspace\VCDevelopment\DoItGreyGUI\Debug\DoItGreyGUI.exe
File: dbgheap.c
Line: 1044

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
Abort Retry Ignore
---------------------------

Hat irgendwer eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.11.2006, 14:11 Uhr
ao

(Operator)



C++:
    for (i = i_BitmapWidth - 1; i >= 0; i--) // hier i_BitmapHeight verwenden!
    {
        delete[] ca_PixelData[i].b;
        delete[] ca_PixelData[i].g;
        delete[] ca_PixelData[i].r;
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.11.2006, 14:15 Uhr
ao

(Operator)


Der Speicherverwaltung ist es übrigens egal, in welcher Reihenfolge die Blöcke wieder freigegeben werden; für diese etwas seltsam anmutende abwärts zählende Schleife gibt es keinen Grund.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.11.2006, 14:22 Uhr
DerSven



Ok, danke.

Manchmal findet man die einfachsten Fehler nichtmehr wenn man zu lang an was dran sitzt.

Und das mit der Schleife kann ich grade auch nicht nachvollzeihen warum ich das so gemacht hab.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: