我遇到了一个问题,我尝试在链表上使用while循环。
我有两个链接列表,即temp
和graph
。我正在使用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;
答案 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
的逻辑将失败。