Warunek z tablica dwuwymiarowa przestaje rysowac plansze o prostokatnych wymiarach
Ostatnio zmodyfikowano 2017-01-06 15:00
Hashiyan Temat założony przez niniejszego użytkownika |
Warunek z tablica dwuwymiarowa przestaje rysowac plansze o prostokatnych wymiarach » 2017-01-06 15:00:37 Cześć, nowy dzień, nowe wyzwania. Nie przeprowadziłem wystarczających testow i wczoraj scommitowalem wersje z bledem. Po kilkudziesieciu minutach w koncu doszedlem, gdzie jest bug, nie wiem tylko dlaczego, a skoro nie wiem dlaczego, nie wiem jak go usunac. void ConsoleSettings() { int Width; int Height; std::cout << "Podaj szerokosc pola w zakresie od 5 do 40: "; std::cin >> Width; if( Width < 5 || Width > 40 ) { InputError( Width ); } std::cout << "Podaj wysokosc pola w zakresie od 5 do 40: "; std::cin >> Height; if( Height < 5 || Height > 40 ) { InputError( Height ); } BoardProperties ConsoleSize; ConsoleSize.Width = Width; ConsoleSize.Height = Height; std::cout << "ConsoleSize.Width = " << ConsoleSize.Width << std::endl; std::cout << "ConsoleSize.Height = " << ConsoleSize.Height << std::endl; DefineFields( ConsoleSize ); return; }
void DefineFields( struct BoardProperties ConsoleSize ) { char ** Board; Board = new char *[ ConsoleSize.Width ]; for( int i = 0; i < ConsoleSize.Width; i++ ) { Board[ i ] = new char[ ConsoleSize.Height ]; } for( int j = 0; j < ConsoleSize.Width; j++ ) { for( int k = 0; k < ConsoleSize.Height; k++ ) Board[ j ][ k ] = 'e'; } int SnakePosX, SnakePosY; int FoodPosX, FoodPosY; system( "cls" ); for( int i = 0; i <= ConsoleSize.Width; i++ ) { std::cout << "--"; } for( int j = 0; j < ConsoleSize.Height; j++ ) { std::cout << std::endl << "|"; for( int k = 0; k < ConsoleSize.Width; k++ ) { if( Board[ j ][ k ] == 'e' ) { std::cout << " "; } } std::cout << "|"; } std::cout << std::endl; for( int l = 0; l <= ConsoleSize.Width; l++ ) { std::cout << "--"; } std::cout << std::endl; Sleep( 500 ); return; }
#pragma once
struct BoardProperties { int Width; int Height; };
Problem dotyczy rysowania planszy w funkcji DefineFields(). W momencie, gdy chce wstawic warunek if (Board[j][k] == 'e') { std::cout << " ";}, nie moge utworzyc tablicy o dlugosci gornej i dolnej krawedzi roznych od dlugosci bocznych krawedzi. Gdy podaje takie same wartosci, rysuje mi prawidlowo. Gdy chce miec prostokat - wywala blad. Gdy warunki wstawie w komentarz, buduje prawidlowo nawet board o roznych bokach. for( int j = 0; j < ConsoleSize.Height; j++ ) { std::cout << std::endl << "|"; for( int k = 0; k < ConsoleSize.Width; k++ ) { ** if( Board[ j ][ k ] == 'e' ) { ** std::cout << " "; ** } ** } std::cout << "|"; } std::cout << std::endl;
[EDIT] Zdebuggowalem. Przy wprowadzeniu wymiarow szerokosc: 5, wysokosc: 6 do momentu narysowania kwadratu 5x5 jest ok. Nastepnie buduje 6 element lewej sciany, resetuje wartosc int k, przechodzi do warunku if(Board[j][k] == 'e' i wywala: Exception thrown at 0x00172B26 in Snake.exe: 0xC0000005: Access violation reading location 0xFDFDFDFD. If there is a handler for this exception, the program may be safely continued. |
|
« 1 » |