我制作了一个实现循环和双向链表的程序。
/*
* listfech2.c
* Last Change: 2014-04-23
* Maintainer: Lucas de Sena <contact@seninha.net>
* License: This file is placed in public domain.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct elemento {
char dado;
struct elemento * ant, * prox;
};
int main (int argc, char **argv)
{
char zero='a';
int i;
struct elemento * lista;
struct elemento *p1, *pinicio;
p1 = NULL;
lista = NULL;
pinicio = malloc (sizeof (struct elemento));
pinicio -> dado = zero;
pinicio -> ant = NULL;
pinicio -> prox = NULL;
p1 = pinicio;
for (i=1; i<10; i++) {
zero++;
lista = malloc (sizeof (struct elemento));
lista -> dado = zero;
lista -> ant = p1;
lista -> prox = pinicio;
p1 -> prox = lista;
printf ("dado atual: %c\n", lista->dado);
printf ("próximo dado: %c\n", lista->prox->dado);
printf (" p1->prox->dado: %c\n", p1->prox->dado);
printf ("===========\n");
p1 = lista;
}
pinicio->ant = lista;
printf("pinicio->ant: %c\n", pinicio->ant->dado);
printf("pinicio->dado: %c\n", pinicio->dado);
printf("pinicio->prox: %c\n", pinicio->prox->dado);
free (lista);
p1=pinicio;
do {
printf("%c\n", p1->dado);
p1=p1 -> prox;
} while (p1 != pinicio );
return 0;
}
它将一个字符列表从'a'挂载到'j'
之后,它会打印列表中的字符。
但它不是printf'j',而是在列表中。
答案 0 :(得分:1)
关键问题在于这一行:
free (lista);
以下显示您的双向链接列表,如上所述&#39; free()&#39;被称为:
也许这个&#39; free()&#39;应删除该行吗?