benutzen meiner Klasse führt zum Absturz
- 
					
					
					
					
 Hallo, 
 Wenn ich folgende Klasse zum Laden und automatischen Löschen von Bildern in meinem Programm benutze bekomme ich am Programmende immer die Meldung, dass Programm müsse beendet werden und ich kann den Fehlercode senden. Naja, ich denke die Meldung ist bekannt bei Windows Nutzern.#ifndef BITMAP_LOADER_HEADER #define BITMAP_LOADER_HEADER #include <allegro> #include "include/log.h" class Bitmap { private: BITMAP* BMPimage; bool loaded; public: Bitmap(const char* _filename) { this->loaded = false; create(_filename); } ~Bitmap() { destroy(); } void create(const char* _filename); void destroy(); BITMAP* getBMP() { return this->BMPimage; } }; void Bitmap::create(const char* _filename) { if(this->loaded) return; BMPimage = load_bitmap(_filename, NULL); WRITE_LOG("BITMAP geladen:"); WRITE_LOG(_filename); this->loaded = true; } void Bitmap::destroy() { if(!this->loaded) return; if(this->BMPimage) destroy_bitmap((this->BMPimage)); this->BMPimage = NULL; this->loaded = false; } #endifHab ich da einen Fehler gemacht? 
 Da der Fehler nur unmittelbar vor Ende des Programms kommt, denke ich das liegt irgendwo am Destruktor.
 
- 
					
					
					
					
 Benutze mal einen Debugger. Das hilft !! Du solltest den Zeiger 
 BITMAP* BMPImage;
 im Konstruktor initialisieren und zwar auf NULL:
 BMPImage = NULL;
 Tust du das nicht, hilft die NOT abfrage gar nix.
 Und deswegen wird wahrscheinlich dein Programm crashen.
 rya.
 Scorcher24
 
- 
					
					
					
					
 Scorcher24 schrieb: im Konstruktor initialisieren und zwar auf NULL: 
 BMPImage = NULL;lieber 0 nehmen - NULL ist nämlich nur ein makro(Stroustrup §5.1.1). mfg 
 
- 
					
					
					
					
 Ich weiss das NULL nur ein Makro ist. Und deswegen ist eigentlich die Verwendung sicher, da es vom Präprozessor mit 0 ersetzt wird. Aber ich finde es ist einfach besser lesbar. Da erkennt man einfacher dass es sich um einen Zeiger und nicht um eine Variable handelt. 
 Denn:
 FOO = 0;
 und
 *FOO = 0;
 sind ja bekanntlich zwei gewaltige Unterschiede... 
 Opinions may differ....
 rya.
 Scorcher24