.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.


Anmelden zum Antworten