【发布时间】:2018-08-06 22:11:03
【问题描述】:
这是我的配对代码:
#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node *next;
};
int main(){
struct Node *list, *head;
head = (struct Node *)malloc(sizeof(struct Node));
list = head;
int i;
for(i=0;i<6;i++){
list->data=i;
list->next = (struct Node *)malloc(sizeof(struct Node));
list = list->next;
}
list->next = NULL;
list = head;
while(list->next->next!=NULL){
int temp = list->data;
list->data = list->next->data;
list->next->data = temp;
list = list->next->next;
}
printf("Pair swapped list: ");
while(head->next!=NULL){
printf("%d\n",head->data);
head=head->next;
}
return 0;
}
我有两个问题。主要是这段代码给出了运行时错误,我不明白为什么。第二件事是,如果我使用 list = NULL 而不是 list->next = null 然后使用 while(list!=NULL) 那么它会导致无限循环。如果代码保持不变,最后会创建一个垃圾元素。请帮帮我。
【问题讨论】:
-
与崩溃无关,但你从未初始化
list->data,它的值将是indeterminate且看似随机的。 -
至于你的crash,请学习如何使用调试器,这样你就可以在监控变量和指针等的同时逐行执行代码。
-
你没有
free()你的记忆。并非所有操作系统都会在main()结束时回收 un-free()d 内存。 -
你认为第一个循环中的
list->data;有什么作用,为什么会有那个代码?
标签: c list linked-list malloc singly-linked-list