2015-08-30 2 views
1

Я только начал использовать указатели. Поэтому, пожалуйста, несите меня, если это выглядит глупо. Но я не могу найти причину. У меня есть структураОшибка при инициализации значений структуры

typedef struct Intermediatenode 
{ 
    int key; 
    char *value; 
    int height; 
    struct node *next[SKIPLIST_MAX_HEIGHT]; 
} node; 

И палочка, чтобы создать новый узел с помощью функции ниже

node *create_node(int key, char * val, int h) 
{ 
     node *newnode; 
     newnode=malloc(sizeof(node)); 
     newnode->height=h; 
     newnode->key=key; 
     printf("till here %s \n",val); 
     printf("till here %d \n",newnode->height); 
     printf("till here %d \n",newnode->key); 
     strcpy(newnode->value,val); 
     printf("till here %s \n",newnode->value); 
     return newnode; 
} 

Но я получаю ошибку сегментации при этом «зЬгср (значении newnode-> Вэл) ;» Не могли бы вы помочь мне в этом. Спасибо большое

ответ

4

Вы выделили память для узла, но не строку в value. Функция strcpy будет копировать байты, но не выделять память. Предполагается, что вы уже это сделали. В крайнем случае, вы можете выделить и скопировать строку с strdup:

newnode->value = strdup(val); 
+1

Обратите внимание, что когда вы 'free' ваш узел позже, вам нужно сначала' 'free' что value'. – paddy

Смежные вопросы