2017-09-25 7 views
-1

Der folgende Code löscht den Inhalt von game.answer in der Zukunft und ich kann nicht herausfinden, warum.Speicherfehler bei Strukturen in C

Das ist die Struktur:

typedef struct 
{ 
    int guesses, guessesAllowed; 
    char* answer; 
    char max; 
} GameState; 

Und das ist meine Aufgabe, eine neue Struktur zu bauen:

GameState makeGame(int guessesAllowed, int numOfPositions, char max, 
    int seed) 
{ 
    GameState game; 
    char answer[9]; 

    answer[0] = '\0'; 

    game.guesses = 0; 
    game.guessesAllowed = guessesAllowed; 
    game.answer = answer; 
    game.max = max; 

    getAnswer(answer, numOfPositions, max, seed); 

    return game; 
} 

ich meine, es hat etwas mit übergeordneten Speicher zu tun, sollte es nicht?

+1

Sie haben eine Struktur mit einem Zeiger. Ich nehme an, Sie haben diesen Zeiger richtig initialisiert? Dass es auf etwas In-Scope und zugewiesenen Speicher zeigt? Und können Sie bitte versuchen, ein [Minimal, *** Complete *** und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen, um uns zu zeigen (und auch die gesamte Eingabe und Ausgabe zu kopieren und einzufügen) des Programms zusammen mit der * erwarteten * Ausgabe)? –

+2

Meine rostige Kristallkugel sagt 'game.answer' zeigt nicht auf richtig zugewiesenen und initialisierten Speicher. Beweise mir das Gegenteil. –

+1

Sie haben keinen Speicher für 'game.answer' zugewiesen. Sie können "strdup" verwenden, wenn Sie etwas zum ersten Mal eingeben, und dann die neue Zeichenfolgenlänge vergleichen. Wenn Länge

Antwort

2

Sie können dies nicht tun:

game.answer = answer; 

Sie erklärten Antwort als Array in einer Funktion. Sie sind nicht erlaubt, um diese Adresse zu behalten und es zurückzugeben.

Der Speicher Ihrer Funktion und die darin verwendeten Variablen wie answer werden sofort wiederverwendet und überschrieben.

+0

zurückgibt. Es wäre nützlich, wenn Sie das Standardkapitel angeben, das den Variablenbereich und die Lebensdauer angibt. Es befindet sich unter * 6.2.4 Speicherdauern von Objekten * in [diesem Dokument] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf). –