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? |