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

c++ błąd odczytu danych

Object Storage Arubacloud
0 głosów
229 wizyt
pytanie zadane 29 grudnia 2019 w C i C++ przez rel Początkujący (340 p.)

Witam, piszę w C++ warcaby, starałem się napisać voida sprawdzającego, czy gdzieś na planszy biały może zbijać.

Zrobiłem to za pomocą pętli, ale cały if jest podkreśłony z komunikatem:
Warning    C6385    Reading invalid data from 'plansza':  the readable size is '64' bytes, but '-8' bytes may be read. 

Wiem, że kompilator odczytuje błędne dane, ale nie jestem pewny co poprawić w kodzie, żeby uporać się z komunikatem (który występuje 10 razy w tym ifie).

Bylbym wdzięczny za wskazanie błędu lub poprawienie kodu. :)

#include <iostream>
#include <cstdlib>
//bialy-o czarny-x
using namespace std;
int i, j, nr, wier, kol, nwier, nkol, a, x, z, wiersz, kolumna;
char plansza[8][8] = { ' ','o',' ','o',' ','o',' ','o',
						'o',' ','o',' ','o',' ','o',' ',
						' ','o',' ','o',' ','o',' ','o',
						' ',' ',' ',' ',' ',' ',' ',' ',
						' ',' ',' ',' ',' ',' ',' ',' ',
						'x',' ','x',' ','x',' ','x',' ',
						' ','x',' ','x',' ','x',' ','x',
						'x',' ','x',' ','x',' ','x',' '
};
void BIALYsprawdzacz()
{
	x = 0;
	for (wiersz = 0; wiersz < 8; wiersz++)
	{
		for (kolumna = 0; kolumna < 8; kolumna++)
		{
			if (plansza[wiersz][kolumna] == 'o' && ((plansza[wiersz + 1][kolumna + 1] == 'x' && plansza[wiersz + 2][kolumna + 2] == ' ') || (plansza[wiersz + 1][kolumna - 1] == 'x' && plansza[wiersz + 2][kolumna - 2] == ' ') ||
				(plansza[wiersz - 1][kolumna - 1] == 'x' && plansza[wiersz - 2][kolumna - 2] == ' ') || (plansza[wiersz - 1][kolumna + 1] == 'x' && plansza[wiersz - 2][kolumna + 2] == ' ')))
			{
				
				x = 1;
			}
			else
			{
				x = 0;
			}
				
		}
	}
}

Nie jest to cały cpp, tylko ten void.

komentarz 29 grudnia 2019 przez tkz Nałogowiec (42,000 p.)
Twoje warunki są beznadziejne. Wyjdziesz poza zakres tablic. Co będzie gdy do 7 dodasz 2? Masz taką operację. Może to powoduje błąd, Sam w sobie błąd jest statyczny, znaczy, że cos pomieszałeś.
komentarz 29 grudnia 2019 przez rel Początkujący (340 p.)
Czy w przypadku, gdzie operacja 7 + 2 zostanie wykonana nie powinna po prostu zostać uznana za fałszywą, a kompilator nie powinien przejść do następnego warunku?
komentarz 29 grudnia 2019 przez tkz Nałogowiec (42,000 p.)

plansza[wiersz + 1][kolumna + 1]

Dlaczego to miałoby zostać uznane za fałszywe?

Wyjdziesz poza zakres, program zakończy się błędem. Statyczny debuger prawdopodobnie nie pozwala Ci tego zrobić. 

komentarz 29 grudnia 2019 przez rel Początkujący (340 p.)
Dzięki, czy jest w takim razie inny w miarę prosty sposób na tego voida? Jestem początkujący, a już od dłuższego czasu nie wiem jak się do tego zabrać  :/
komentarz 29 grudnia 2019 przez tkz Nałogowiec (42,000 p.)
if (
		//row
		((board[0][0] == board[0][1]) && (board[0][1] == board[0][2]) && (board[0][0] != BoardCell::EMPTY)) ||
		((board[1][0] == board[1][1]) && (board[1][1] == board[1][2]) && (board[1][0] != BoardCell::EMPTY)) ||
		((board[2][0] == board[2][1]) && (board[2][1] == board[2][2]) && (board[2][0] != BoardCell::EMPTY)) ||
		//collumn
		((board[0][0] == board[1][0]) && (board[1][0] == board[2][0]) && (board[0][0] != BoardCell::EMPTY)) ||
		((board[0][1] == board[1][1]) && (board[1][1] == board[2][1]) && (board[0][1] != BoardCell::EMPTY)) ||
		((board[0][2] == board[1][2]) && (board[1][2] == board[2][2]) && (board[0][2] != BoardCell::EMPTY)) ||
		//cross
		((board[0][0] == board[1][1]) && (board[1][1] == board[2][2]) && (board[0][0] != BoardCell::EMPTY)) ||
		((board[0][2] == board[1][1]) && (board[1][1] == board[2][0]) && (board[0][2] != BoardCell::EMPTY)) 
		)
	{
		return false;
	}

Bardzo prosto, niekoniecznie ładnie. 

Dla jasności, nie mówię,że to jest Twoim problem, taki mój domysł. 

komentarz 29 grudnia 2019 przez rel Początkujący (340 p.)
Wielkie dzięki, teraz to już dużo jaśniejsze :)

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2019 przez Gildin1_2 Gaduła (3,060 p.)
wybrane 7 stycznia 2020 przez rel
 
Najlepsza

zamiast 

char plansza[8][8]

użyj

char *plansza[] =

nie musisz się bawić w liczenie, a wskaźnik sobie poradzi  

Podobne pytania

0 głosów
0 odpowiedzi 111 wizyt
pytanie zadane 20 kwietnia 2020 w Java przez malybyq Użytkownik (980 p.)
0 głosów
0 odpowiedzi 92 wizyt
pytanie zadane 10 kwietnia 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
2 odpowiedzi 1,559 wizyt
pytanie zadane 1 marca 2016 w C i C++ przez adrian28 Użytkownik (540 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 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!

...