Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »"Jonathan_Klein"«
Ich bin mir nicht mehr sicher, aber ich habe mal gehört, das vor einem Array im Speicher noch Zusatzinformationen stehen, die delete[] dann benutzt um das gesamte Array zu löschen.
Daher muss man Arrays immer mit delete[] freigeben und normale Objekte immer mit delete.
Zitat von »"David_pb"«
Veruchen kannst dus. Im Grund musst du nur die globalen Funktionen operator new und operator delete überschreiben.
Zitat von »"David_pb"«
Der Operator delete[] löscht ein Zeiger auf ein Array von reservierten Elementen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// Speicher reservieren int **p = new int*[ 100 ]; // 100 int* for ( int i = 0; i < 100; ++i ) p[ i ] = new int( i ); // jedes element reservieren mit dem defaultwert 'i' // Speicher freigeben for ( int i = 0; i < 100; ++i ) delete p[ i ]; delete[] p; |
C-/C++-Quelltext |
|
1 2 3 |
#ifdef _DEBUG
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
|
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
struct sprite { hed_node header; pal_node palette; frm_node frames; // <- sfm oder gfm ... aber WIE ? }; struct sfm_key { int32_t frameType; // enthält die Typsignatur des Frames. 0 = Singleframe, 1 = Groupframe. int32_t frameOriginX; // enthält einen Integerwert mit der Koordinate des Ursprungs auf der X-Achse. int32_t frameOriginY; // enthält einen Integerwert mit der Koordinate des Ursprungs auf der Y-Achse. int32_t frameWidth; // enthält die Breite des Frames in Pixel ausgelesen. Kann von der Breitenangabe des Headers abweichen. int32_t frameHeight; // enthält die Höhe des Frames in Pixel ausgelesen. Kann von der Höhenangabe des Headers abweichen. uint8_t *data; // enthält die Bytedaten des Frames. Ein Eintrag entspricht einem Pixel. Der Wert ist der Index einer Farbe in der Farbpalette. }; struct gfm_key { int32_t frameType; // enthält die Typsignatur des Frames. 0 = Singleframe, 1 = Groupframe. int32_t numIntervall; // enthält einen Integerwert mit der Anzahl der auszulesenden Groupframes. float *intervall; // enthält einen Floatwert, welcher die Anzeigesequenz des Groupframes bestimmt. int32_t frameOriginX; // enthält einen Integerwert mit der Koordinate des Ursprungs auf der X-Achse. int32_t frameOriginY; // enthält einen Integerwert mit der Koordinate des Ursprungs auf der Y-Achse. int32_t frameWidth; // enthält die Breite des Frames in Pixel ausgelesen. Kann von der Breitenangabe des Headers abweichen. int32_t frameHeight; // enthält die Höhe des Frames in Pixel ausgelesen. Kann von der Höhenangabe des Headers abweichen. uint8_t *data; // enthält die Bytedaten des Frames. Ein Eintrag entspricht einem Pixel. Der Wert ist der Index einer Farbe in der Farbpalette. }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
#ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #define new new(_NORMAL_BLOCK, __FILE__, __LINE__) #endif |
Zitat von »"drakon"«
Da fällt mir nur Vererbung ein oder du hast einfach beide, wobei eines hald unbenutzt ist.
C-/C++-Quelltext |
|
1 2 3 |
#ifdef _DEBUG
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
|
Quellcode |
|
1 2 3 |
I:\Eigene Dateien\Eigene C++ Projekte\Half Life Sprite Tool\sprite_tool.cpp(10) : error C2501: '_CrtSetDbgFlag' : Fehlende Speicherklasse oder Typbezeichner I:\Eigene Dateien\Eigene C++ Projekte\Half Life Sprite Tool\sprite_tool.cpp(10) : error C2373: '_CrtSetDbgFlag' : Neudefinition; unterschiedliche Modifizierer c:\program files (x86)\microsoft visual studio\vc98\include\crtdbg.h(442) : Siehe Deklaration von '_CrtSetDbgFlag' |
Werbeanzeige