2016-04-23 16 views
0
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

typedef struct node 
{ 
    char *arr; 
    struct node *next; 
} node; 

int main() 
{ 
    char *word = (char *)malloc(sizeof(char) * 20); 
    strcpy(word, "jon jones"); 

    node *sentence; 
    sentence->arr = word;   //Problem here 
    printf("%s", sentence->arr); 

    return 0; 
} 

Ich versuche, ein Zeichen-Array dynamisch zuzuweisen. Setzen Sie eine Zeichenfolge ein und stellen Sie das Datenelement des Knotens auf das Zeichenfeld. Wenn ich das Programm starte, bekomme ich einen Segmentierungsfehler. Ich vermute, dass es von der Linie ist, die ich oben beschriftet habe. Was ich nicht verstehe, ist, dass ich Satz-> arr Punkt auf das erste Element des Wortfeldes setze. Warum würde es so abstürzen? Danke im Voraus.macht einen Zeiger auf ein Array von Zeichen in c

+2

Hinweis off topic: Es gibt [keine Notwendigkeit] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) um ein Ergebnis von 'malloc' zu werfen – red0ct

Antwort

0

Sie verwenden einen Zeiger zum Knoten aber dieser Knoten zugeordnet worden ist. Verwendung: node sentence; sentence.arr = word; printf("%s", sentence.arr);

Es sollte besser sein. Sie können auch gdb verwenden, um herauszufinden, welche Zeile den Fehler verursacht.

+0

Sie sollten auch den dynamisch zugewiesenen Speicher freigeben, wenn er nicht mehr benötigt wird. – SeB

+0

Ja, ich bin mir dessen bewusst und weiß, wie es geht. Ich arbeitete an einem viel größeren Programm, aber ich konnte diesen Buckel für eine Weile nicht überwinden, also versuchte ich, ein kleineres Programm zu machen, um die Mechanismen zu verstehen, warum "dieses" oder "das" nicht funktionierte. Danke für deine Zeit und Hilfe –

0
node *sentence; 
sentence->arr = word;   //Problem here 

Pointer sentence deklariert, aber es ist nicht initialisiert und Dereference, so dass es nicht definiertes Verhalten verursacht.

Speicher zuweisen, bevor es dereferencing -

node *sentence; 
sentence=malloc(sizeof(*sentence)); 

Auch wenn Sie Knoten machen wollen dann strcpy statt dessen verwenden -

sentence->arr = word;  // but allocate memory to `arr` before copying 
0

Sie haben vergessen, Ihren Satz Variable zu initialisieren.

Nach Arbeiten für mich

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

typedef struct node 
{ 
    char *arr; 
    struct node *next; 
}node; 

int main() 
{ 
    char *word = (char *)malloc(sizeof(char) * 20); 
    strcpy(word, "jon jones"); 

    node *sentence = (node*)malloc(sizeof(node)); // Initialize node area 
    sentence->arr = word; 
    printf("%s", sentence->arr); 

    return 0; 
} 
0

Entweder Speicher für node wie Sie für word oder verwenden Sie eine Struktur anstelle von struct Zeiger.

node *sentence; 
sentence = (node*)malloc(sizeof(node)); 
sentence->arr = word;   
printf("%s", sentence->arr); 

oder

node sentence; 
sentence.arr = word;   
printf("%s", sentence->arr); 
Verwandte Themen