.exe stürtzt dauernd ab...Neuling in C
-
Hallo liebe community,
ich bin ein richtiger Neuling im programmieren von c. Wir haben das erste Mal C in unserer Info Vorlesung und ich wollte mal daheim diese alten Textbasierten Spiele programmieren und scheitere gerade und weiß nicht was der folgende Fehler bedeutet:
Unbehandelte Ausnahme bei 0x5577e30e (msvcr100d.dll) in Spiel.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00000000.
hier der Quellcode:
// Spiel.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
/***** Variablen*****/
//char Username;
{int Benutzereingabe=0;
int Richtung=0;//printf("Herzlich willkomen im Spiel :)\nbitte gebe deinen Namen ein\n");
//fflush(stdin);
//scanf("%s", &Username);printf("Hallo!\n");
printf("Welcher Klasse moechtest du angehoeren?\n");
printf("1=\tOrk\n");
printf("2=\tRitter\n");
printf("3=\tSpartaner\n");scanf("%d", Benutzereingabe); // einlesen der Benutzerwahl. welche Klasse gewählt wurde
fflush(stdin);switch (Benutzereingabe)
{
case 1: printf("Du hast die Klasse Ork gew\x084hlt\n");
break;case 2: printf("Du hast die Klasse Ritter gew\x084hlt\n");
break;case 3: printf("Du hast die Klasse Spartaner gew\x084hlt\n");
break;default: printf("Na dann ohne Klasse :)\n");
break;
}printf("Wohin möchtest du laufen?Nach Osten, Westen, Sueden oder Osten???\n");
printf("Norden=\t4\n");
printf("Sueden=\t5\n");
printf("Osten=\t6\n");
printf("Westen=\t7\n");scanf("%d", &Richtung);
fflush(stdin);switch (Richtung)
{
case 4: printf("Du gehst nach Norden und gehst durch einen Wald.\nDort triffst du einen Troll.\nDieser versperrt dir den Weg.\nEventuell koenntest du ihn mit einer scharfen\nWaffe erledigen?!\n");
break;case 5: printf("Du gehst nach Sueden und endeckst eine Burg mit einem versperrtem Tor");
break;case 6: printf("Du gehst nach Osten und findest eine Axt");
break;case 7: printf("Du gehst nach Westen und dir wird der Weg durch einen reissenden Fluss versperrt.\nDu benoetigst ein Brett um diesen zu ueberqueren.");
break;default: printf("Du hast zu lange gewartet und wurdest von einem Drachen getoetet");
break;}
getchar();return 0;
}
Das ist wirklich nichts großes bis jetzt aber ich verstehe nicht warum die exe nicht mehr läuft.
Danke im Vorraus.
Mfg.
-
Das kommt davon, dass du auf einen ungültigen Zeiger zugreift. Wenn das Programm abstürzt, zeigt der Debugger auch die richtige Stelle an.
-
Mechanics schrieb:
Das kommt davon, dass du auf einen ungültigen Zeiger zugreift. Wenn das Programm abstürzt, zeigt der Debugger auch die richtige Stelle an.
*(long UNALIGNED *)pointer = (unsigned long)number;
visual zeigt genau hier drauf.Meinst du mit dem Zeiger bei einem scanf("%..", &Variable); das & ?
-
Das letzte scanf bei dir passt. Die ersten nicht.
-
f.-th. schrieb:
Das letzte scanf bei dir passt. Die ersten nicht.
Funzt nun danke.
-
Dino988 schrieb:
Mechanics schrieb:
Das kommt davon, dass du auf einen ungültigen Zeiger zugreift. Wenn das Programm abstürzt, zeigt der Debugger auch die richtige Stelle an.
*(long UNALIGNED *)pointer = (unsigned long)number;
visual zeigt genau hier drauf.Meinst du mit dem Zeiger bei einem scanf("%..", &Variable); das & ?
Du musst evtl. den Stack Trace hochgehen, bis du in deinem Code bist. Solche Probleme selber finden zu können ist viel wichtiger, als dieses konkrete Problem zu lösen. Mit sowas haben C/C++ Programmierer ständig zu tun, da ist sehr wichtig, von Anfang an gut mit dem Debugger umgehen zu können.
-
Warum benutzt du keine Codetags?
Liest du als Neuling im Forum die FAQ nicht?Die scanf-Argumente hinter dem Formatstring unterliegen der default argument promotion, dort steht int 0, scanf erwartet aber einen Zeiger und will diesen dereferenzieren. Die Dereferezierung eines NULL-Zeigers ist UB, sei froh, dass der Compiler Code erzeugt, der dir diesen deinen (Anfänger)Fehler mitteilt und nicht 'irgendwie' weitermacht.