if (previous->abcnext == NULL){
new = create_place();
previous->place = string;
new->abcnext = previous->abcnext;
previous->abcnext = new;
}
Пара очевидных проблем с приведенным выше кодом. Во-первых, вы не устанавливаете new->place
- вы заменяете previous->place
, что кажется неправильным. Таким образом, ваш новый узел будет иметь значение NULL для своего «места», и вы потеряете значение для предыдущего узла.
Во-вторых, вы присваиваете значение string
, а не делаете новую копию. Если вы используете одну и ту же строку каждый раз, когда вызываете функцию, вы получите все узлы, указывающие на одну и ту же строку.
Вы должны сделать что-то вроде
new->place = malloc(strlen(string)+1);
strcpy(new->place, string);
или, если она есть в вашей версии C, используйте strdup
new->place = strdup(string);