Speicherzugriffsfehler ?!
-
Hallo, wenn ich das code ausführe, dann funksionert diese Code nur für gleiche Start und Ziel werte. Für alle andere bekomme ich die Meldung: "Speicherzugriffsfehler"
Kann mir bitte jemand sagen für liegt da Fehler?
danke#include <iostream> #include <stdlib.h> using namespace std; char labyrinth[50][50]; void lesen() { FILE *pf; int zeile, spalte; char c; pf = fopen( "laby.txt", "r"); for( zeile = 0, spalte = 0;;) { c = fgetc( pf ); if( feof( pf) ) { labyrinth[zeile][spalte] = 0; break; } labyrinth[zeile][spalte] = c; spalte++; if( c == '\n' ) { zeile++; spalte = 0; } } fclose ( pf ); } void ausgabe() { int zeile, spalte; char c; for( zeile = 0, spalte = 0; c = labyrinth[zeile][spalte];) { printf("%c", c); spalte++; if( c == '\n') { zeile++; spalte = 0; } } } int weg( int start_z, int start_s, int ziel_z, int ziel_s) { if ( (start_z == ziel_z) && ( start_s == ziel_s)) { labyrinth[start_z][start_s] = '+'; return 1; } if( labyrinth[start_z-1] [start_s] = ' ') { labyrinth[start_z][start_s] = '^'; if(weg(start_z-1, start_s, ziel_z, ziel_s)) return 1; } if( labyrinth[start_z+1] [start_s] = ' ') { labyrinth[start_z][start_s] = 'v'; if(weg(start_z+1, start_s, ziel_z, ziel_s)) return 1; } if( labyrinth[start_z] [start_s-1] = ' ') { labyrinth[start_z][start_s] = '<'; if(weg(start_z, start_s-1, ziel_z, ziel_s)) return 1; } if( labyrinth[start_z] [start_s+1] = ' ') { labyrinth[start_z][start_s] = '>'; if(weg(start_z, start_s+1, ziel_z, ziel_s)) return 1; } labyrinth[start_z] [start_s] = ' '; return 0; } int main() { int start_z, start_s, ziel_z, ziel_s; lesen(); ausgabe(); printf( "\nStart (Zeile Spalte): "); scanf( "%d %d", &start_z, &start_s); printf( "Ziel ( Zeile Spalte): "); scanf( "%d %d", &ziel_z, &ziel_s); printf( "\n"); if(weg(start_z, start_s, ziel_z, ziel_s)) ausgabe(); else printf( "Keine Lösung!\n"); }
-
- Mit hoher Wahrscheinlichkeit daran, dass du die Array-Indexgrenzen nicht einhältst.
- std::vector oder boost::array verwenden und dort ne Indexprüfung einbauen
- printf ist böse und lame
-
1. Zum Vergleichen der Zeichen willst du wahrscheinlich == anstatt = benutzen.
2. Benutze dynamische Arrays, wie zum Beispiel std::vector oder halt char **;
3. Nachdem du labyrinth zu einem dynamischen Array gemacht hast, sagt dir valgrind, wo du Arraygrenzen nicht einhälst.
-
Ponto schrieb:
1. Zum Vergleichen der Zeichen willst du wahrscheinlich == anstatt = benutzen.
Ja, das habe ich vergessen. DANKE . Jetzt funsksionert OK.