Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » C++ Xcode Segmentation fault/EXC_BAD_ACCESS Fehlermeldung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.04.2011, 15:05 Uhr
~Death Bread
Gast


Hi!
Ich bin gerade dabei, mir ein kleines Spiel im Terminal zu programmieren. Der Compiler gibt keine Fehlermeldungen oder Warnungen aus, aber es kommt ein Laufzeitfehler: Segmentation fault im Terminal und EXC_BAD_ACCESS in der Xcode Console.

Hier der Quellcode (die Stellen, die meiner Meinung nach unwichtig sind, habe ich rausgenommen):

C++:
#include <iostream>
using namespace std;

int main () {
    const char *Actions[] = {"", "up", "down", "left", "right", "exit"};

    struct Coordinates   {
        int x;
        int y;
    }Character = {10, 10};
    
    char Action[6];
    bool Exit;
    int DoAction = 0;
    
    while(Exit == false)   {
        /* Hier wird nach Aktionen gefragt */
        while(DoAction == 0)   {
            while((strcmp(Action, Actions[DoAction]) != 0 || !strcmp(Action, "")) && DoAction < sizeof(Actions) / sizeof(Actions[1])) // In dieser Zeile ist der Fehler: EXC_BAD_ACCESS bzw. Segmentation fault
                DoAction++;

            switch(DoAction)   {
                default: // something wrong
                    cout << "Action: ";
                    cin.getline(Action, 6);
                    cout << "\033[A\033[2K";
                    DoAction = 0;
                    break;
                case 1: // up
                    if(Character.y > 0)
                        Character.y--;
                    break;
                case 2: // down
                    if(Character.y < 21)
                        Character.y++;
                    break;
                case 3: // left
                    if(Character.x > 0)
                        Character.x--;
                    break;
                case 4: // right
                    if(Character.x < 21)
                        Character.x++;
                    break;
                case 5: // exit
                    Exit = true;
                    break;
            }
        }
        strcpy(Action, "");
    }
    return 0;
}


Ich hoffe ihr könnt mir helfen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.04.2011, 16:27 Uhr
0xdeadbeef
Gott
(Operator)


Action wird benutzt, bevor sie initialisiert wird.

Warum benutzt du eigentlich nicht std::string, wo du doch C++ schreibst? Damit kann man sich sehr viel weniger leicht vertun als mit rohen Byte-Buffern.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 25.04.2011 um 16:28 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2011, 18:20 Uhr
~Death Bread
Gast


Vielen Dank, jetzt klappt es perfekt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: