Первая точка, это называется автоматическое распределение, а не статическое распределение.
Вторая точка, этот код является неопределенным поведением, поскольку он использует неинициализированный указатель
while (data != -1) {
node* temp;
temp->data = data;
temp->next = NULL;
it->next = temp;
it = it->next;
cin>>data;
}
Здесь temp
не заданозначение, поэтому его использование temp->data
является ошибкой.Это не имеет ничего общего с типами распределения.Проблема в том, что ничто не было выделено, каким-либо образом, для temp
, чтобы указывать на.
Третий пункт, давайте попробуем исправить вышеуказанную проблему с автоматическим размещением, вы могли бы написать этот код, и он скомпилирует
while (data != -1) {
node auto_node;
node* temp = &auto_node; // a pointer to an automatically allocated object
temp->data = data;
temp->next = NULL;
it->next = temp;
it = it->next;
cin>>data;
}
Этот код, скорее всего, вылетит при запуске.Причина в том, что вы используете auto_node
объекты вне функции.Возможно, это ваше настоящее недоразумение.Хотя вы не используете объекты auto_node
напрямую, вы сохранили указатели на эти объекты, все указатели next
в вашем связанном списке указывают на эти автоматически распределенные узлы, которые не существуют вне вашей функции createlinklist
.