0

我有高级语言的经验,但我是 C 的新手。我已经获得了单链表的实现。每次我尝试遍历列表时,我都会内存不足(至少我认为这是正在发生的事情)。这是列表的实现:

/*Vertex data type.*/
typedef struct vnode {
   struct vnode *NEXT;
   int DATA;
      } VertexBody;
typedef VertexBody *TypeVertex;

/*List data type (no header, just a pointer to first item).*/
typedef TypeVertex TypeList;

这是我的打印功能:

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(NEXT(v)!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}

运行 print_list 给出以下输出(假设列表包含 3 个顶点,数据分别设置为 1、2、3):

1
2
3
-94064

然后程序崩溃。有什么问题?

编辑:在第一段中将“遍历”更改为“遍历”。

4

2 回答 2

2

在遍历链表时,您要确保当前项不是NULL. 一旦你确认了,你想把它打印出来,然后得到下一个。

因此,这段代码:

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(NEXT(v)!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}

应该:

void print_list(TypeList *L) {
    TypeVertex v=*L;
    while(v!=NULL) {
        printf("%d\n", DATA(v));
        v=NEXT(v);
    }
    printf("%d\n", DATA(v));
}
于 2012-10-19T15:55:17.447 回答
0

看来我错误地识别了这个问题。程序崩溃了,因为我忘记为列表分配内存。我觉得自己像个白痴,但至少我可以继续前进。谢谢您的回答。

于 2012-10-20T02:12:26.513 回答