断言 ‘l !=NULL’ 因 List 而失败
Assertion ` l !=NULL' failed with List
我正在用 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;
}
在此先感谢您的帮助。
您需要传递指向列表指针的指针,以便在函数中更改它的内容。
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));
您应该将 l
的地址传递给函数 add
。
另外我看到你还没有初始化局部变量。第一个断言不是必需的。
像这样调用你的函数:
printf("%d\n", add("hello",&l));
更改函数原型
int add(char* user, list**l)
并相应地修改您的函数。
我正在用 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;
}
在此先感谢您的帮助。
您需要传递指向列表指针的指针,以便在函数中更改它的内容。
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));
您应该将 l
的地址传递给函数 add
。
另外我看到你还没有初始化局部变量。第一个断言不是必需的。
像这样调用你的函数:
printf("%d\n", add("hello",&l));
更改函数原型
int add(char* user, list**l)
并相应地修改您的函数。