2017-12-04 4 views
0

Ich bin sehr neu in der Verwendung einer struct, so dass einige der Code, den ich gerade zeige, möglicherweise inkorrekt sein, und das kann die Ursache sein Fehler, den ich bekomme. Ich schreibe Code, der versucht, Stapel mit Hilfe einer struct nachzuahmen. Ich versuche gerade, eine pushInt() Funktion zu machen, die einen Zeiger zu einem Stapel struct und etwas int Wert nimmt. Dies ist der Code, den ich für die puchInt() Funktion haben:Struct Segmentierung Fehler: 11. Nicht möglich, Werte in einer Struktur neu initialisiert zuerst Null zu initialisieren

Stack *pushInt(Stack *stack, int value) 
    { 
     stack->intTop = TRUE; 
     stack->data.intValue = value; 
     stack->next = NULL; 

     return stack; 
    } // end pushInt 

Dies ist der Code, den ich die stact struct zu definieren, verwenden. Es ist eine selbstverweis Struktur wie ein likedList zu handeln:

struct StackNode 
    { 
     int intTop; 

     union { 
      int intValue; 
      char stringValue[MAX_STRING_LENGTH]; 
     } data; 

     struct StackNode *next; 
    }; 

Dies ist die wichtigste Funktion, die ich die Funktionalität des Codes zu testen laufen:

int main() 
    { 
     Stack *theStack = NULL; 

     //getInteger function just gets user input 
     int pushValue = getInteger("value to push onto stack: "); 
     theStack = pushInt(theStack, pushValue); 
    } 
+0

Sie müssen Speicher für Ihren Knoten reservieren. –

+0

@RetiredNinja würde dies mit malloc in der 'pushInt()' Funktion getan werden, bevor ich die Variablen neu zuweisen? – theGreatOne

Antwort

0

theStack = pushInt (theStack, pushValue);

Hier wird der NULL-Zeiger (theStack initialisiert mit NULL) übergeben. So wird der NULL-Zeiger innerhalb der pushInt-Funktion auf De-referenziert und daher der Seg-Fehler.

Sie müssen der Variable den Speicher zuweisen.

Verwandte Themen