我在C中实现了一个链式列表结构,但是我得到了一个断言错误:断言`l!= NULL'失败了。然而,我并不认为拥有它。
这是我的结构:
typedef struct list list;
struct list{
element * elt;
list * next;
};
这是我的添加方法:
int add(char* user, list*l){
if(l==NULL){
printf("NULL %s\n", user);
l=malloc(sizeof(list));
l->elt=malloc(sizeof(element));
(l->elt)->username=malloc(sizeof(char)*256);
strcpy((l->elt)->username,user);
(l->elt)->score=0;
return 1;
}
else{
printf("not NULL %s\n", user);
return add(user,l->next);
}
}
这是主要的:
int main(){
list * l ;
assert(l==NULL);
printf("%d\n", add("hello",l));
assert(l!=NULL);
return 1;
}
提前感谢您的帮助。
答案 0 :(得分:4)
您需要将指针传递给列表指针,以便在函数中更改它的内容。
int add(char* user, list**l){
if((*l)==NULL){
printf("NULL %s\n", user);
(*l)=malloc(sizeof(list));
(*l)->elt=malloc(sizeof(element));
((*l)->elt)->username=malloc(sizeof(char)*256);
strcpy(((*l)->elt)->username,user);
((*l)->elt)->score=0;
return 1;
}
else{
printf("not NULL %s\n", user);
return add(user,&((*l)->next));
}
}
和函数调用必须类似
list *l = NULL; //pointer is allocated, points to nothing for now
printf("%d\n", add("hello",&l));
答案 1 :(得分:1)
您应该将l
的地址传递给函数add
。
另外我看到你没有初始化局部变量。第一个断言不是必需的。
像这样调用你的函数:
printf("%d\n", add("hello",&l));
更改功能原型
到int add(char* user, list**l)
并相应地修改你的功能。