Несколько вещей -
Как правило, при работе со связанной структурой, такой как связанный список (как в данном случае), вы выделяете память для объектов в куче, используя malloc
, а не в стеке. Это объясняется тем, что вы хотите, чтобы элементы связанной структуры пережили функцию, которая их создает, и поэтому выделение стека отдельными ячейками вряд ли будет работать правильно. Вы, вероятно, хотите создать структуру, написав что-то вроде
struct List* entry = malloc(sizeof(struct List));
В качестве продолжения, поскольку логика чтения содержимого ячейки связанного списка от пользователя и добавления его в список идентична для каждой ячейки, которую вы читаете, вы, вероятно, не хотите просто копировать код для этого пять раз. Вместо этого подумайте о написании такой функции:
struct List* ReadListEntry(void) {
struct List* entry = malloc(sizeof(struct List));
/* ... initialize 'entry' ... */
return entry;
}
Таким образом, ваш код в main
может быть в пять раз короче, и если вы обнаружите какие-либо ошибки в коде (как вы, похоже, и сделали), вам нужно будет изменить его только один раз, а не пять раз.
Что касается вашего исходного вопроса, я думаю, что проблема в том, что вы пишете
scanf("%d", myValue);
вместо
scanf("%d", &myValue);
Эта первая версия неверна и может вызвать сбой во время выполнения. scanf
предполагает, что вы предоставляете указатель на целое число, а не на целое число, в качестве аргумента всякий раз, когда вы используете спецификатор формата %d
, поэтому явный амперсанд, вероятно, причиняет вам боль.
Комбинируя это с приведенной выше идеей использовать вспомогательную функцию для создания выделенных в куче ячеек списка, вы можете попробовать написать такую функцию:
struct List* ReadListEntry(void) {
struct List* entry = malloc(sizeof(struct List));
scanf("%d", &entry->value);
entry->nextaddr = NULL;
return entry;
}
Учитывая это, вы, вероятно, можете переписать вашу функцию main
, чтобы она была намного проще, чем у вас есть сейчас. Я оставлю это в качестве упражнения для читателя. : -)
Надеюсь, это поможет!