我有这个运行时错误,当我添加一个比列表中的任何内容更大的数字时。我不明白为什么。我认为代码应该只添加包含数字的节点,并将空指针称为下一个节点。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node{
int value;
struct Node * next;
};
typedef struct Node Node;
void front(int, Node**);
void print(Node*);
void add(Node**,int);
Node**place(Node**,int);
void verwijder(Node**, int);
void clearList(Node**);
int main () {
int i;
Node * l = 0;
front(10,&l);
front(5,&l);
front(1,&l);
add(&l,9);
add(&l,5);
add(&l,11);
verwijder(&l,5);
verwijder(&l,9);
verwijder(&l,1);
clearList(&l);
free(l);
print(l);
}
void front(int number,Node ** start ) {
Node * new = malloc(sizeof(Node));
new->value = number;
new->next = *start;
*start = new;
}
Node** place(Node ** start, int number){
while((*start)->value < number && (*start) != 0) {
start = &((*start)->next);
}
return start;
}
void add(Node ** start, int number) {
Node ** space = place(start,number);
Node * new = malloc(sizeof(Node));
new->value = number;
new->next = *space;
*space = new;
}
void verwijder(Node ** start, int number) {
Node**space = place(start,number);
Node * delete = *space;
if(delete->value == number) {
*space = (*space)->next;
}
free(delete);
}
void print(Node * l) {
while( l != 0) {
printf("%i -> ",(l)->value);
l = (l)->next;
}
printf("0 \n");
}
void clearList(Node** start) {
Node * current = *start;
while(current != 0) {
*start = (*start)->next;
free(current);
current = *start;
}
free(current);
}
答案 0 :(得分:0)
我认为您的问题与功能有关 - Node** place(Node ** start, int number)
。
如果您尝试插入值大于列表中任何当前项的新项,start
将返回NULL。因此,在add
中,new->next
将为NULL
,这可能是您在列表项范围内添加项目时的原因。
您需要检查是否要附加列表。如果您的项目将成为该列表中的最后一项,那么您需要确保先前最后一项是否指向新项目。