Fehlermeldung: : Zugriffsverletzung beim Schreiben an Position ...
-
Hallo Leute,
ich habe versucht anhand einpaar YouTube Tutorials ein kleines "Programm" zu Programmieren und bin dabei immer wieder an diese Fehlermeldung gestoßen:Ausnahme ausgelöst bei 0x002D12DB in Project2.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x002D5001.
Ausnahmefehler bei 0x002D12DB in Project2.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x002D5001Da ich ein blutiger Anfänger bin, habe ich keine Ahnung was es damit auf sich hat.
Hier ist der Code:
#include <iostream> struct Spielfeld { bool istBesetzt; char Name[10]; }; const int Breite = 5; const int Hoehe = 5; Spielfeld spielf[Breite][Hoehe]; void showGame(); void showField(); void clear(); void set(); int main() { int Wert = 0; clear(); do { std::cout << std::endl; std::cout << "1 - Clear" << std::endl; std::cout << "2 - showGame" << std::endl; std::cout << "3 - showField" << std::endl; std::cout << "4 - set" << std::endl; std::cin >> Wert; switch (Wert) { case (1): { clear(); }break; case (2): { showGame(); }break; case (3): { showField(); }break; case (4): { set(); }break; default: { std::cout << "Falscher Wert!" << std::endl; } } } while (Wert < 5 && Wert > 0); return 0; } void clear() { for (int x = 0; x < Breite; x++) { for (int y = 0; x < Hoehe; y++) { spielf[x][y].istBesetzt = false; } } } void showGame() { for (int x = 0; x < Breite; x++) { for (int y = 0; x < Hoehe; y++) { if ( spielf[x][y].istBesetzt == true ) { std::cout << "b"; } else { std::cout << "n"; } } } } void set() { int y, x; std::cout << "Gebe X ein!" << std::endl; std::cin >> x; std::cout << "Gebe Y ein!" << std::endl; std::cin >> y; if (spielf[x][y].istBesetzt = true) { std::cout << "ist bereits besetzt!" << std::endl; } else { std::cout << "Gebe den Namen des Spielers ein!" << std::endl; std::cin.get(spielf[x][y].Name, 9); spielf[x][y].istBesetzt = true; } } void showField() { int y, x; std::cout << "Gebe X ein!" << std::endl; std::cin >> x; std::cout << "Gebe Y ein!" << std::endl; std::cin >> y; if (spielf[x][y].istBesetzt == true) { std::cout << "Name: " << spielf[x][y].Name << std::endl; } else { std::cout << "ist noch nicht besetzt!" << std::endl; } }
Entschuldigung im Voraus falls der Code zu lang zum lesen ist. Visual Studio zeigt nicht in welcher Zeile sich der Fehler befindet.
Ich bedanke mich für jeden Tipp.
-
Du greifst auf Speicher zu, der dem Programm nicht gehört.
x.cpp: In function ‘void set()’:
x.cpp:106:31: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if (spielf[x][y].istBesetzt = true)
~~~~~~~~~~~~~~~~~~~~~^Da willst du sicher ein ==. Schalte die Warnungen in deinem Compiler an.
Benutze std::string, nicht char Arrays. Initialisiere deine Struktur:
struct Spielfeld { bool istBesetzt{false}; std::string Name; };
-
Der eigentlich Fehler sind die zwei Zeilen mit
for (int y = 0; x < Hoehe; y++)
Du willst nicht x überprüfen. Mit einem Debugger kann man diese Fehler leicht finden.
Vermeiden lassen sich solche Fehler, wenn man erst gar keinen Index benutzt:
#include <iterator> ... void clear() { for (auto& row: spielf ) { for ( auto& field: row ) { field.istBesetzt = false; } } }