C使用带循环列表的while循环

时间:2012-12-11 12:54:49

标签: c list while-loop linked-list

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

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;

1 个答案:

答案 0 :(得分:1)

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

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