Access Violation

0

Witam , napisalem projekt w C/C++ , prowadzacy pod koniec powiedzial zebym go przerobil na czysto obiektowy. No i mam problem, dostaje Access Violation przy takim kodzie w konstruktorze :

 Explosion::Explosion()
{
        //...
    this->image = al_load_bitmap("explosion.png");
}

Tak wyglada klasa:

class Explosion 
{
public:
        //...
    ALLEGRO_BITMAP *image;

    Explosion();
        //...
}

a funkcja al_load_bitmap:

 ALLEGRO_BITMAP *al_load_bitmap(const char *filename)

A obiekty tworze tak:

Explosion explosions[NUM_EXPLOSIONS] 

Prosze wiec o pomoc. W poprzedniej wersji gdy lecialem forem po wszystkich elementach struktury dzialalo, teraz dostaje ten blad.
Pozdrawiam.

0

No to debuger i w dłoń. Błąd taki pojawia się kiedy odwołujesz się do niezaalokowanej pamięci.

0

Nie jestem pro w debuggerze VS, ale odwoluje sie do 0xcdcdcdcd czyli tak jak mowisz niezaalokowanej pamieci. Teraz tworze obiekty operatorem new i problem sie nie rozwiazuje.

 Explosion *explosions = new Explosion[NUM_EXPLOSIONS];

Jak zatem zaalokowac pamiec dla tego wskaznika?

0

Bo trzeba rozumieć co się robi, a nie zmieniać losowe fragmenty kodu. Musisz zobaczyć kiedy się odwołujesz do niezaalokowanej pamięci i dlaczego jest ona w danym miejscu niezaalokowana. Może przypadkiem używasz gdzieś jakiegoś lokalnego, niezaalokowanego wskaźnika? A może po prostu wychodzisz gdzieś poza tablicę (numerujemy od 0 do n-1) itd.

0

sądząc po wartości wskaźnika (0xcdcdcdcd) to ten wskaźnik nie ma ustawionej wartości (w trybie dedug kompilator domyślnie nadaje wskaźnikom taką wartość).

0

Piszesz:


public:
        //...
        ALLEGRO_BITMAP *image;

...

 Explosion::Explosion()
{
        //...
        this->image = al_load_bitmap("explosion.png");
}

Nie dziwne ze wywala access violation. Jak na moje oko konstruktor powinien wygladac tak:


 Explosion::Explosion()
{
        image=new ALLEGRO_BITMAP;
        image = al_load_bitmap("explosion.png");
}

(Kod nie testowany)
Tak mi sie wydaje, a czy mam racje nie wiem ; )

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0