steckel Temat założony przez niniejszego użytkownika |
[Allegro5] Klasa i wskaźniki » 2010-02-09 18:14:34 Witam! Mam taką klasę: class Czcionka { public: ALLEGRO_FONT * font; ALLEGRO_COLOR kolor; Czcionka() { font = al_load_ttf_font( "times.ttf", 20, 0 ); kolor = al_map_rgb( 255, 255, 255 ); } Czcionka( std::string napis, int wielkosc, ALLEGRO_COLOR zkolor ) { font = al_load_ttf_font( napis.c_str(), wielkosc, 0 ) ); kolor = zkolor; } Czcionka( const Czcionka & czcionka ) { font = czcionka.font; kolor = czcionka.kolor; } ~Czcionka() { al_destroy_font( font ); } void Napisz( std::string napis, int x, int y, int flagi ) { al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor ); al_draw_text( font, x, y, flagi, napis.c_str() ); } };
Po wykonaniu instrukcji: Czcionka font = Czcionka( "times.ttf", 20, al_map_rgb( 0, 0, 255 ) ); font.Napisz( "aaaaaa", 50, 50, 0 );
Program się wysypuje, bo mam problem ze wskaźnikiem. Czy ktoś potrafi temu zaradzić, aby wskaźnik prawidłowo się tworzył i niszczył? |
|
malan |
» 2010-02-09 18:27:26 << delete >> Radziłbym Ci zmienić nazwę tego obiektu, bo jeszcze potem jakieś problemy będziesz miał. |
|
steckel Temat założony przez niniejszego użytkownika |
» 2010-02-09 18:40:07 Chodziło mi o wskaźnik na czcionkę wbudowany w allegro5: |
|
Elaine |
» 2010-02-09 18:51:26 Tak, ktoś potrafi. |
|
DejaVu |
» 2010-02-09 19:11:05 sprawdzaj czy wskaźnik!=NULL zanim zaczniesz cokolwiek z nim robić. |
|
Elaine |
» 2010-02-09 19:29:40 To nic nie da, bo nie o null pointer dereference tu chodzi. |
|
steckel Temat założony przez niniejszego użytkownika |
» 2010-02-09 19:32:32 Zmodyfikowałem funkcję rysuj: void Napisz( std::string napis, int x, int y, int flagi ) { if( font != NULL ) { al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor ); al_draw_text( font, x, y, flagi, napis.c_str() ); }
void Napisz( std::string napis, int x, int y, int flagi ) { if( & font != NULL ) { al_set_blender( ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA, kolor ); al_draw_text( font, x, y, flagi, napis.c_str() ); }
W destruktorze zrobiłem to samo i obie wersje nie działają. Po za tym nie chcę dopuścić do sytuacji, kiedy wskaźnik będzie miał wartość NULL. Wszystko działa jeśli destruktor skomentuję, ale wtedy będę miał wycieki pamięci. |
|
DejaVu |
» 2010-02-09 19:41:27 Spróbuj więc nie używać konstruktora kopiującego i sprawdź czy działa. |
|
« 1 » 2 3 |