Fehler gesucht



  • Hi wo liegt der Fehler?
    Fehler Meldung:
    Nicht abgefangene Ausnahme in Code.exe: 0xC0000005: Access Violation.

    Ich danke schon mal.

    Alle Funktion bis auf diese funktionieren.
    Wenn ich über main die spiel() ausführe und mittels "z" wieder verlasse so stürzt das programm ab, wenn ich in der schleife von main anschließend eine eingabe mache.

    int spiel(char zeigerxy[8][8])
    	{
    	//Daten einlesen
    	 ifstream dat_ein; 
    	 string dateiname=("Einstellungen.txt");
    	 string Schwierigkeit, W_Feld, M_Feld, Comp ;
    	 string befehl2, options;
    
    	 //Datei auslesen
    	 dat_ein.open(dateiname.c_str(),ios_base::in);
    
    	 if (!dat_ein)
    		 {				 
    		 Datei_neu_erstellen();
    		 dat_ein.open(dateiname.c_str(),ios_base::in);
    		 }
    
    	 while (!dat_ein.eof())		
    		 {	
    		 dat_ein >> options;			 		 
    		 if (options=="Schwierigkeit")
    			 {dat_ein >> Schwierigkeit;} 
    		 if (options=="1_Weise_Felder_anzeigen")
    			 {dat_ein >> W_Feld;}
    		 if (options=="2_Mögliche_Felder_nach_Auswahl_anzeigen?")
    			 {dat_ein >> M_Feld;}
    		 if (options=="3_Computerzug_anzeigen?")
    			 {dat_ein >> Comp;}	   		 
    		 }	 
    
    	 dat_ein.close();	
    
    	// Hauptschleife
    
    	while (befehl2!="Z" && befehl2!="z")
    		{
    		 cout << "Eingabe: ";
    		 cin >> befehl2;
    		}
    	return 0;
    	}
    
    int main(int argc, char* argv[])
    {
     char befehl;
     while(befehl!='7')
    	 {
    	 //Menü ausgeben	
    	 cout << endl;					  
    	 cout << " Men\x81" << endl;	
    	 cout << "  Neues Spiel            1" << endl;
    	 cout << "  Grafik-Optionen        2" << endl;
    	 cout << "  Schwierigkeit          3" << endl;
    	 cout << "  Programm beenden       7" << endl;
    	 cout << endl;
    	 cout << "Ihre Eingabe: ";		
    	 cin  >> befehl; 
    
    	 //Befehl ausführen
    	 switch(befehl)	
    		 {
    		 case '1':	cout << endl;
    			 char xy[8][8];
    			 neu(xy);
    			 brett(xy);
    			 spiel(xy);
    			 break;
    
    		 case '2':	cout << endl; 
    			 Grafik();
    		    break;
    
    		 case '3':	cout << endl;
    			 Schwierigkeit();		 
    			 break; 
    
    		 case '7':	cout << endl;
    			 continue;
    			 break;	 
    
    		 default:cout << endl; 
    			 cout << "Ung\x81ltige Eingabe" << endl;	
    			 break;
    		 } 
    	}
    	return 0;
    }
    


  • GAS schrieb:

    ...Access Violation...

    Eine Access Violation ist eine Zugriffsverletzung, üblicherweise dadurch ausgelöst, das man zur Laufzeit auf einen ungültigen Speicherbereich zugreift. Laufzeitfehler findet man durch den Debugger.

    Des weiteren solltest du statt den Code-Tags die Cpp-Tags verwenden, um den Code hervorzuheben...

    Anmerkungen zum Code:
    1. Verwende sprechende Funktions- und Variablennamen. Bleibe bei der Benennung einheitlich (nicht mal groß, dann klein...). Das macht das lesen für andere, und auch für dich, deutlich besser.

    2. Rücke deinen Code sauber ein.

    3. Deklariere Variablen, wenn du sie benötigst, und nicht ewig davor. Das macht unter Anderem das Lesen einfacher, und ermöglicht auch leichter Änderungen am Code (z.B. das Aufsplitten langer Funktionen).

    4. Verwende einen Debugger.



  • gut werde ich zukünftig beherzigen

    der Debugger sagt der Fehler liegt hier:

    while(befehl!='7')


Log in to reply