【问题标题】:C using while loop with linked listC使用带有链表的while循环
【发布时间】:2023-03-30 23:11:01
【问题描述】:

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

附:这是家庭作业的一部分。

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;

【问题讨论】:

  • 错误信息是什么?
  • 您能否至少向我们展示一下 temp、stack 和 graph 的定义。如果您添加编译器错误会有所帮助。
  • However, this code does not compile. 我不明白这个说法。您没有任何 sintatic 问题。
  • Unhandled exception at 0x00d716c2 in graph.exe: 0xC0000005: Access violation reading location 0xcdcdcdd9.
  • @meany 这不是编译器问题。代码编译得很好

标签: c list while-loop linked-list


【解决方案1】:

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

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

【讨论】:

  • 没有赞成票,没有讨论,没有 cmets。然而一个选定的答案。我生命中最美好的一天:-P - 谢谢@meany
  • 我确实必须将链接设为 NULL 进行初始化哈哈谢谢您的建议!
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2021-12-28
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多