Мне нужна помощь в выяснении, почему я получаю это нарушение доступа. Это домашняя работа, я все это написал, но в конечном итоге получаю нарушение прав доступа при печати списка. Я пытаюсь распечатать список вперед и назад. Я подозреваю, что проблема в обратной функции. Вот код и спасибо за помощь.Нарушение прав доступа с печатью с двойным списком ссылок
list.h
typedef int Titem;
// Interface of list
typedef struct node *Tpointer;
typedef struct node
{
Titem item;
Tpointer next, previous;
} Tnode;
typedef struct
{
Tpointer first;
Tpointer last;
}Tdbl;
void initialize_dbl (Tdbl *list);
void insert_to_dbl_front (Tdbl *list, Titem data);
void insert_to_dbl_back (Tdbl *list, Titem data);
void print_dbl (Tdbl const list);
void print_dbl_reverse (Tdbl const list);
list.c
#include <stdio.h>
#include <stdlib.h>
#include "List.h"
#define TYPE_INT 0
#define TYPE_FLOAT 1
// Implementation of list (only obj is need in appl)
void initialize_dbl (Tdbl *list)
{
list->first = NULL;
list->last = NULL;
}
void insert_to_dbl_front (Tdbl *list, Titem data)
{
Tpointer newnode;
if(list->first == NULL)
{
newnode = (Tpointer) malloc(sizeof(Tnode));
newnode->item = data;
newnode->next = NULL;
newnode->previous = NULL;
list->first = newnode;
}
else
{
newnode = (Tpointer) malloc(sizeof(Tnode));
newnode->item = data;
newnode->next = list->first;
newnode->previous = NULL;
list->first = newnode;
}
}
void insert_to_dbl_back (Tdbl *list, Titem data)
{
Tpointer newnode;
newnode = (Tpointer) malloc(sizeof(Tnode));
newnode -> item = data;
if (list->first == NULL)
list->first = newnode; //first node
else
list->last->next = newnode; //not first node
list->last = newnode;
list->last->next = NULL;
}
void print_dbl (Tdbl const list)
{
Tpointer what;
printf("\nList forward:");
what = list.first;
while (what != NULL) {
printf("%d ", what->item);
what = what->next;
}
}
void print_dbl_reverse (Tdbl const list)
{
Tpointer last = list.last;
Tpointer temp = NULL;
printf("\nList reversed: ");
if(last == NULL)
{
printf("");
}
else
{
while(last != NULL)
{
temp = last->next;
last->next = last->previous;
last->previous = temp;
last = temp;
}
printf("\nList reverse:");
while (last != NULL)
{
printf("%d ", last->item);
last = last->next;
}
}
}
main.c
#include "list.h"
#include <stdio.h>
int main(void) {
Tdbl dbl;
initialize_dbl(&dbl);
print_dbl(dbl);
print_dbl_reverse(dbl);
insert_to_dbl_back(&dbl, 10);
print_dbl(dbl);
print_dbl_reverse(dbl);
insert_to_dbl_front(&dbl, 20);
print_dbl(dbl);
print_dbl_reverse(dbl);
insert_to_dbl_back(&dbl, 30);
print_dbl(dbl);
print_dbl_reverse(dbl);
insert_to_dbl_front(&dbl, 40);
print_dbl(dbl);
print_dbl_reverse(dbl);
insert_to_dbl_back(&dbl, 50);
print_dbl(dbl);
print_dbl_reverse(dbl);
fflush(stdin); getchar();
}
Я просмотрел около 10 различного экзамена ссылки связанных списков, а также на форуме для ответа на мой вопрос. Каждый пример, который я попытался сделать с изменением списка, кажется, ничего не делает или заканчивается этой ошибкой нарушения прав доступа. О да, ничто в главном или заголовочном файле не может быть изменено.
Добро пожаловать в SO! Вы хотите, чтобы сообщество SO отлаживало ваш код? – vyegorov
Сторона примечания: 'fflush (stdin);' undefined до C. – FatalError
Это поможет увидеть «эту ошибку нарушения доступа» – smocking