2012-12-11 38 views
0

我遇到了一个问题,我尝试在链表上使用while循环。 我有两个链表,分别为temp和。我正在使用while循环来执行任务while(temp != NULL)。要继续在每个循环中,我将分配temp = temp->link。但是,这段代码不能编译。我意识到递归函数可能是一个解决方案,但函数实际上更复杂,我不认为递归会是一个好主意。顺便说一句,已经是一个建立链接列表。提前致谢!C使用while循环链表

P.S.这是作业的一部分。

temp = graph->link; 
while(temp!=NULL){ 
    if(stack->link == NULL){ 
     stack->link = (node_pointer)malloc(sizeof(graph)); 
     stack->link->weight = temp->weight; 
     stack->link->vertex = temp->vertex; 
    } 
    temp = temp->link; //Here is the problem. 
} 

编辑:

堆栈和图表是链表的两个阵列:

typedef struct node *node_pointer; 

struct node{ 
    int vertex; 
    int weight; 
    int visited; 
    struct node *link; 
}; 
node_pointer graph[50]; 
node_pointer stack[50]; 
node_pointer temp; 
+0

什么是错误信息? –

+0

您能否至少向我们展示temp,stack和graph的定义。如果你添加编译器错误,它会有所帮助。 – dwalter

+0

'但是,这段代码不能编译。 “我不明白这个说法。你没有任何的麻烦问题。 – banuj

回答

1

0xC00000005不是编译时间错误。当您访问不允许的内存位置时,通常会发生此错误,即使它指向NULL。它是一个运行时错误。检查temp是否不为NULL,并且也正确地编辑malloc。是吗?同时检查所有其他变量。使用调试器,通过valgrind运行它。它将帮助你正确地学习语言和调试技术。特别是CompileTime和RuntimeErrors ;-)。

当创建新节点时,还明确地将link设置为NULL。指针变量通常包含一个没有初始化的JUNK值。我假设你没有设置linkNULL并访问JUNK内存位置。垃圾进垃圾出。如果LINK为非空垃圾,则您的逻辑IF TEMP(WHICH IS SET TO LINK) IS NOT EQUAL TO NULL失败。

+0

没有投票,没有讨论,没有评论。然而,选择的答案。我的生活中的最佳日子:-P - 谢谢@meany –

+0

我确实有链接作为NULL为初始化哈哈谢谢你的建议! – meany