Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

"Wystąpił problem z aplikacji i zostanie ona zamknięta" - nie mogę odnaleźć błędu w kodzie

Ostatnio zmodyfikowano 2007-11-20 21:45
Autor Wiadomość
szarry
Temat założony przez niniejszego użytkownika
"Wystąpił problem z aplikacji i zostanie ona zamknięta" - nie mogę odnaleźć błędu w kodzie
» 2007-11-20 19:39:25
C/C++
#include <iostream>
#include <conio.h>
#include "console.ddt"
using namespace ddt::console;
using namespace std;
string pole[ 4 ][ 4 ];

void rysuj( void );
int main()
{
    int a = 0, b = 0;
    while( a != 5 && b != 5 )
    {
       
        while( a != 5 )
        {
            while( b != 5 )
            {
                cout << "Wprowadz symbol dla: x=" << a << " y=" << b << endl;
                pole[ a ][ b ] = getch();
                b++;
            }
            b = 0;
            a++;
           
        }
    }
    rysuj();
    getch();
    return 0;
}
/*-------------------------------------------------------*/
void rysuj( void )
{
    int a = 0;
    int b = 0;
    int x = 11, y = 1;
    while( a <= 4 && b <= 4 )
    {
       
        while( a <= 4 )
        {
            while( b <= 4 )
            {
                gotoxy( x, y );
                textbackground( 8 );
                cout << pole[ a ][ b ];
                b++;
                y++;
            }
            b = 0;
            y = 1;
            a++;
            x++;
        }
    }
    return;
}
Jest to kod nieukończonego jeszcze programu, rozwiązującego klasyczne zadanie labiryntu (Zajdź drogę z punktu a do punktu b z ominięciem przeszkod), jednak po skompilowaniu i uruchomieniu tego " programu " w celu sprawdzenia, czy rysowanie przebiega prawidłowo w momencia wprowadzenia znaku do string pole [4] [0] program zawiesza się i na ekranie widnieje xpkowski komunikat:
"Wystąpił problem z aplikacją labirynt.exe i zostanie ona zamknięta. Przepraszamy za kłopoty."

Co jest tego przyczyną i jak rozwiązać ten problem??
P-79
DejaVu
Naruszenie ochrony pamięci
» 2007-11-20 20:01:20
Rozmiar tablicy Twojej to:
string pole[ 4 ][ 4 ];
Wyjście poza tablicę = naruszenie ochrony pamięci

Musisz zadbać o to, aby wartość indeksów była z przedziału [0..3][0..3]. Ty wychodzisz poza tą wartość, więc w pewnym momencie otrzymujesz naruszenie ochrony pamięci i wyrzuca Ci taki błąd.
P-80
szarry
Temat założony przez niniejszego użytkownika
Czy dobrzę rozumiem?
» 2007-11-20 21:02:33
Nie jestem pewien, czy dobrze zrozumiałem.
Jak zamienię:
C/C++
string pole[ 4 ][ 4 ];
na
C/C++
string pole[ 5 ][ 5 ];
to broblem przestanie występować??
Chodzi mi o uzyskanie planszy (labiryntu) owymiarach 5x5 pól.
P-81
DejaVu
» 2007-11-20 21:45:18
Obecnie masz planszę 4x4, więc jeśli chcesz mieć 5x5 to musisz napisać to o czym mówisz. Czy problem przestanie występować, nie wiem. Nie sprawdzałem jak dokładnie działa Twój algorytm, ale jeśli algorytm jest poprawnie napisany to napewno będzie działało.
P-82
« 1 »
  Strona 1 z 1