0

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

PS 这是家庭作业的一部分。

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.
}

编辑:

stack 和 graph 都是链表的数组:

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;
4

1 回答 1

1

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

在创建新节点时也显式地制作linkNULL指针变量通常包含一个没有初始化的 JUNK 值。我假设您没有设置linkNULL访问 JUNK 内存位置。垃圾进垃圾出。IF TEMP(WHICH IS SET TO LINK) IS NOT EQUAL TO NULL如果 LINK不为空而是垃圾,您的逻辑失败。

于 2012-12-11T13:05:48.987 回答