Skocz do zawartości

[Allegro5]Access violation


Markar

Rekomendowane odpowiedzi

#include <allegro5/allegro5.h>
#include <allegro5/a5_primitives.h>
#include <iostream>
#undef main

using namespace std;

int Plansza[640][480];

class CWoda
{
    private:
        float x;
        float y;

    public:
        CWoda(float xx, float yy) { x=xx; y=yy; Plansza[(int)x][(int)y]=1; }
        ~CWoda() { Plansza[(int)x][(int)y]=0; }

        void Steep() 
        { 
            if( x >=0 && y+1 >=0 && x < 640 && y+1 < 480 )
            {
                if ( Plansza[(int)x][(int)y+1]==0 )
                { 
                    Plansza[(int)x][(int)y]=0;
                    y+=1;
                    Plansza[(int)x][(int)y]=1;
                }
                else if ( Plansza[(int)x+1][(int)y]==0 )
                { 
                    Plansza[(int)x][(int)y]=0;
                    x+=1;
                    Plansza[(int)x][(int)y]=1;
                }
                else if ( Plansza[(int)x-1][(int)y]==0 )
                { 
                    Plansza[(int)x][(int)y]=0;
                    x-=1;
                    Plansza[(int)x][(int)y]=1;
                }
            }

            al_draw_pixel( x, y, al_map_rgb(0,0,255) );
        }
};

void main()
{
    al_init();
    al_install_keyboard();

    if ( !al_create_display(640, 480) )
    {
        cout << "Nie udalo sie utworzyc okna!" << endl;
        getchar();
        return;
    }

    CWoda *O_woda[1000];
    O_woda[0] = new CWoda(100, 100);


    ALLEGRO_KEYBOARD_STATE KEY_STATE;
    al_get_keyboard_state(&KEY_STATE);

    while ( !al_key_down(&KEY_STATE, ALLEGRO_KEY_ESCAPE) )
    {
        al_get_keyboard_state(&KEY_STATE);
        al_clear_to_color( al_map_rgb(255,255,255) );

        for(int i=0; i<1000; i++)
        {
            if ( O_woda[i]!=NULL ) O_woda[i]->Steep(); else break;
        }

        al_flip_display();
    }

    for(int i=0; i<1000; i++)
    {
        if ( O_woda[i]!=NULL ) {delete O_woda[i];} else break;
    }
}

 

Pokazuje taki błąd:

First-chance exception at 0x00411a80 in Gierka3.exe: 0xC0000005: Access violation reading location 0xcccccccc.

Unhandled exception at 0x00411a80 in Gierka3.exe: 0xC0000005: Access violation reading location 0xcccccccc.

 

W drugim if'ie funkcji steep();

Używam Visual C++ 2010 Express. Ktoś wie co mam zrobić aby działało?

 

EDIT: Właśnie nie pamiętałem o tagu code :)

Edytowane przez Markar
Zamiast tagu GML można użyć tagu Code.
Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

else if ( Plansza[(int)x+1][(int)y]==0 )

dla y == -1 jest błąd, if go dopuszcza (y+1>=0)

else if ( Plansza[(int)x-1][(int)y]==0 )

dla x == 0 jest błąd, if go dopuszcza (x>=0)

 

Edit: a wystarczyło te wartości drukować na ekran, nawet debugowanie nie jest potrzebne...

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...