Wczytywanie pliku do tablicy dwuwymiarowej

0

Witam. W ramach ćwiczeń postanowiłem napisać sobie program wczytujący cyfry z pliku a nastepnie wyswietlający bitmapy jeżeli cyfra to 1 i nic nie robiacy jezeli to cyfra 0 (biblioteka allegro). Wszystko szło gładko gdy stworzyłem tablice jednowymiarową i wczytałem dane tylko z jednej lini pliku. Jednak problemy przywitaly sie ze mną gdy postanowilem poszerzyc swoja tablice o jeden wymiar. Tylko jakie problemy ? Tego nie wiem bo kompilator uważa, że z kodem wszystko w porządku jednak sam windows próboje mnie namówić na wysłanie raportu o jego błędach, czytałem go ze 100 razy próbowałem znaleźć błąd ale nie moge jakoś na niego wpaść, może wy mi w tym pomożecie ?

#include <cstdlib>
#include <iostream>
#include <allegro.h>
#include <fstream>
#include <string>
#include <stdlib.h>

volatile long speed = 0;

void increment_speed()
{
speed++;
}
END_OF_FUNCTION(increment_speed);  

LOCK_VARIABLE(speed);
LOCK_FUNCTION(increment_speed);

class cBrick
{
   public:
          int x,y;
          int szerokosc; //poki co zamiast podawac zmienna dlugosci na sztywno ja wpisywalem
          BITMAP *bBrick;
          void show(BITMAP *bufor,int x,int y)
          { masked_blit(bBrick, bufor, 0,0, x, y, bBrick->w, bBrick->h);}
                  
};

void ruch(int x, int y);

using namespace std;

int main()
{
  allegro_init();
  install_keyboard();
  set_color_depth(32);
  set_gfx_mode(GFX_AUTODETECT,1280,1024,0,0);  
   
  //deklaracje zmiennych 
  install_timer();
  install_int_ex(increment_speed, BPS_TO_TIMER(100));  
  BITMAP *bufor = NULL;
  int map[20][5],ilosc[20],all=0,o=0;
  string tekst;  
  fstream plik;
  //definicje zmiennych
  plik.open("mapa.txt", ios::in | ios::binary);  
  bufor = create_bitmap(1280,1024); 
    
  while(!plik.eof())
  {
    
                            
         getline(plik,tekst);
         for(int i=0;i<tekst.length();i++)
         {        
            if(tekst[i] == '1'){map[i][o]=1;ilosc[o]++;all++;} //ilosc[o] czyli ilosc cyfr w jednej lini i all czyli laczna ilosc cyfr
            if(tekst[i] == '0'){map[i][o]=0;ilosc[o]++;all++;}  
             
         }
       o++;
     
     
  }
  cBrick *brick= new cBrick[all]; //tworze tyle brick'ow ile jest cyfr a nie ile jedynek ale to rozwiaze potem
    for(int z=0;z<=o;z++)
    {
      for(int i=0;i<=ilosc[z];i++)
      {
        if(map[i][z]==1)
        {
          brick[i].bBrick = load_bmp("brick.bmp",default_palette);
          brick[i].szerokosc=72;   
          brick[i].x=i*brick[i].szerokosc;brick[i].y=70*z; //70*z liczba lini czyli 0,70,140 itp
        }         
      }
    }

      
 
   
  while( !key[KEY_ESC])
  {  
       while( speed > 0)
       {
         
         
         speed--;
       }
  clear_to_color(bufor, makecol(0,0,0));

     for(int z=0;z<=o;z++)
     {
       for(int i=0;i<=ilosc[z];i++)
       {
         if(map[i][z]==1)brick[i].show(bufor,brick[i].x,brick[i].y);
       }
     }


  blit( bufor, screen, 0,0,0,0,1280,1024);

}  

remove_int(increment_speed);
 

destroy_bitmap(bufor);
allegro_exit();
return 0;
}
END_OF_MAIN();  
0

Odświeżam

0

Odświeże jeszcze raz

0

Odświeże jeszcze raz

0

Jeszcze raz tak "odświeżysz", a temat trafi prosto do Kosza. Myślisz, że Twój problem jest najważniejszy na świecie i wszyscy będą lecieć i w ciągu minuty po napisaniu Ci odpowiedzą? To się mylisz. I pomyśleć, że były zdolny polski bramkarz jest abuserem ;/

0

Ach, powiało świeżością.

Odpowiedź brzmi: użyj debuggera. Chyba jakieś środowisko IDE masz, prawda? Jeśli nie masz, to się zaopatrz.
Odpalisz program, wysypie się na konkretnej linijce.

Najbardziej prawdopodobne jest, że wyjeżdżasz gdzieś poza tablicę.

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