【发布时间】:2012-10-10 06:56:02
【问题描述】:
我有高级语言方面的经验,但我是 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
然后程序崩溃。有什么问题?
编辑:在第一段中将“遍历”更改为“遍历”。
【问题讨论】:
-
看起来你没有在构造时初始化
NEXT指向NULL的指针。 -
@DanielFischer 那么简单地在 C 中声明某些内容不会将其设置为 NULL 吗?这可以解释很多。
-
不,一般来说不是。如果没有显式初始化,则具有静态存储持续时间的对象被隐式初始化为 0,自动的东西(局部变量)不是。
标签: c linked-list loops