Markar Opublikowano 12 Lipca 2010 Udostępnij Opublikowano 12 Lipca 2010 (edytowane) #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 12 Lipca 2010 przez Markar Zamiast tagu GML można użyć tagu Code. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 12 Lipca 2010 Udostępnij Opublikowano 12 Lipca 2010 if( x >=0 && y+1 >=0 && x < 640 && y+1 < 480 ) czemu y+1 dziwny kod Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 12 Lipca 2010 Autor Udostępnij Opublikowano 12 Lipca 2010 Przepraszam za błąd, w drugim if'ie funkcji steep. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 12 Lipca 2010 Udostępnij Opublikowano 12 Lipca 2010 po co ci tam floaty zacznijmy od tego error pewnie spowodowany tym ze wychodzisz po za tablice uzyj debuggera :) i w pioerwszym ifie tez bym dawal x+1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 12 Lipca 2010 Autor Udostępnij Opublikowano 12 Lipca 2010 Nie przekraczam rozmiaru tablicy na około 99,82% Już od trzech dni z tym walczę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 12 Lipca 2010 Udostępnij Opublikowano 12 Lipca 2010 nie ma innego pwoodu raczej dla ktorego mialbys access violation powiedz co chcesz zrobic bo ten kod jest seiro dziwny Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lipca 2010 Administratorzy Udostępnij Opublikowano 12 Lipca 2010 zdebuguj, bedziesz wiedzieć do którego momentu program dochodzi, a gdzie się wywala Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Markar Opublikowano 12 Lipca 2010 Autor Udostępnij Opublikowano 12 Lipca 2010 Właśnie dochodzi do drugiego if'a w Steep(). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
waxx Opublikowano 12 Lipca 2010 Udostępnij Opublikowano 12 Lipca 2010 sprobuj jak mowilem zamienic if( x >=0 && y+1 >=0 && x < 640 && y+1 < 480 ) na if( x + 1>=0 && y+1 >=0 && x + 1< 640 && y+1 < 480 ) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lipca 2010 Administratorzy Udostępnij Opublikowano 12 Lipca 2010 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę