#c
#c
Вопрос:
Строка head->data = (int)1; , выдает указанное выше исключение — генерируется необработанное исключение: нарушение доступа на запись. head был 0xFFFFFFFFCBB1E630. В чем может быть причина?
#include <stdio.h>
#include <conio.h>
void print_nodes(struct Node* head);
struct Node {
int data;
struct Node* next;
};
void print_nodes(struct Node* head) {
struct Node* current = (struct Node*)malloc(sizeof(struct Node));
while (current->next != NULL) {
printf("%d", current->data);
}
}
void main() {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
struct Node* first = (struct Node*)malloc(sizeof(struct Node));
struct Node* second = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = first;
first->data = 2;
first->next = second;
second->data = 3;
second->next = NULL;
print_nodes(head);
}
Комментарии:
1. В чем смысл
current
? Просто используйтеhead
.current->next
не инициализирован.2. Когда это будет исправлено,
while (current->next != NULL)
будет бесконечный цикл, когдаcurrent->next != NULL
. Должно бытьstruct Node* current = head
и внутри цикла,current = current->next
. Или просто работайте сhead
прямымprint_nodes()
вводом, поскольку это копия заголовка списка.3. Как вы получили это для компиляции без включения
<stdlib.h>
и<malloc.h>
?4. Спасибо. вы все правы. Я должен назначить struct Node* current = head; и запустить while (current) . я больше не получаю ошибку.
Ответ №1:
В print_nodes()
, нет необходимости выделять.
//struct Node* current = (struct Node*)malloc(sizeof(struct Node));
struct Node* current = head;
Еще лучше, начните с head
, а не .next
.
void print_nodes(const struct Node* current) {
while (current) {
printf("%d", current->data);
current = current->next
}
}
Комментарии:
1. Спасибо. Вы помогли мне это исправить
Ответ №2:
Вы проверили, был ли head допустимым указателем? Вероятно, нет.
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
If(0==head) return 1;
head->data = 1;
Комментарии:
1. Это хорошая практика, но не причина ошибки здесь.
2. Спасибо. Я применил то, что вы предложили.