• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z obsługą plików tekstowych w C++ Builder 6.0

Object Storage Arubacloud
+1 głos
201 wizyt
pytanie zadane 24 czerwca 2016 w C i C++ przez Ray Nowicjusz (130 p.)

Witam, pisząc pewien projekt w C++ Builder natknąłem się na bardzo dziwny błąd którego mimo licznych prób i poszukiwań odpowiedzi w google nie udało się rozwiązać. Otóż ów projektem miała być prosta okienkowa wersja popularnej gry w "Państwa i Miasta" i o ile sama aplikacja się kompiluje i włącza to w momencie sprawdzania odpowiedzi gracza wyskakuje dziwny błąd co do którego przyczyny nie mam pojęcia.



Po wciśnięciu klawisza "OK" odsyła mnie metody w bibliotece dstring.h w miejscu zaznaczone komentarzem "BŁĄD".

 


    char& __fastcall operator [](const int idx)
    {
 */ BŁĄD */     ThrowIfOutOfRange(idx);   // Should Range-checking be optional to avoid overhead ??
      Unique();                 // Ensure we're not ref-counted
      return Data[idx-1];
    }

Do przechowywania odpowiedzi graczy i do ich sprawdzania wykorzystuję poniższą klasę oraz jej metodę .

 

class player
  {  public:
  //Zmienne :
    int punkty;
    AnsiString panstwo;
    AnsiString miasto;
    AnsiString zwierze;
    AnsiString roslina;
    AnsiString imie;

  //=========================================

  // Funkcje :


void sprawdz()
{
AnsiString linia;
char* bufor;
  punkty = 0;
   fstream plik;

   //----------------------------------------

   //Państwo :
   if (panstwo [0] == litera)
   {

   plik.open("data\\panstwa_lib.txt",ios::in);
   while (plik != "")
   {
   plik.getline(bufor,sizeof(bufor));
   linia = bufor;

    if(panstwo ==  linia )
   {
      punkty=punkty+10;
   }

   }
   }
   plik.close();

     //Miasto:
   if (miasto [0] == litera)
   {

   plik.open("data\\miasta_lib.txt",ios::in);
   while (plik != "")
   {
   plik.getline(bufor,sizeof(bufor));
   linia = bufor;
    if(miasto == linia)
   {
      punkty=punkty+10;
   }
   }
   }
  plik.close();

       //Zwierze:
   if (zwierze [0] == litera)
   {

   plik.open("data\\zwierzeta_lib.txt",ios::in);
   while (plik != "")
   {
   plik.getline(bufor,sizeof(bufor));
   linia = bufor;
    if(zwierze == linia)
   {
      punkty=punkty+10;
   }
   }
}
  plik.close();

       //Roslina:
   if (roslina [0] == litera)
   {

   plik.open("data\\rosliny_lib.txt",ios::in);
   while (plik != "")
  {
  plik.getline(bufor,sizeof(bufor));
   linia = bufor;
    if(roslina == linia)
   {
      punkty=punkty+10;
   }
   }
}
  plik.close();

       //Imię:
   if (imie [0] == litera)
   {

   plik.open("data\\imiona_lib.txt",ios::in);
   while (plik != "")
   {
   plik.getline(bufor,sizeof(bufor));
   linia = bufor;
    if(imie == linia)
   {
      punkty=punkty+10;
   }
   }
}
  plik.close();
   }
  };

Byłbym niezmiernie wdzięczy za wszelkie rozwiązania oraz rady, dodam tylko, że pomimo intensywnych poszukiwań nie znalazłem skutecznego rozwiązania.
Pozdrawiam i czekam na odpowiedz :) 

Edit 1: link do obrazka gdyby ktoś nie mógł odczytać komunikatu błędu  http://imgup.pl/di/NJFZ/przechwytywanie.png

2 odpowiedzi

0 głosów
odpowiedź 24 czerwca 2016 przez JAKUBW Nałogowiec (33,470 p.)
Prawdopodobnie odwołujesz się do pustego wskaźnika. Sprawdź to włączając debuger.
0 głosów
odpowiedź 25 czerwca 2016 przez maly Nałogowiec (37,190 p.)

Indeks dla AnsiString zaczyna się od 1 a nie od 0, zresztą widać to po kodzie który podałeś.

return Data[idx-1];

 

Podobne pytania

0 głosów
1 odpowiedź 296 wizyt
pytanie zadane 24 stycznia 2017 w C i C++ przez Fouks Nowicjusz (120 p.)
0 głosów
1 odpowiedź 347 wizyt
0 głosów
1 odpowiedź 108 wizyt
pytanie zadane 30 września 2016 w C i C++ przez Radekol Bywalec (2,880 p.)

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...