【发布时间】:2017-04-11 23:24:40
【问题描述】:
Valgrind 坚持认为此函数存在内存泄漏,但我无法找到它。这是在 c 中使用链表的集合实现的一部分。
int set_add(set * s,int e[2]){
if(set_empty(*s)) {
element * new=malloc(sizeof (element));
new->coord[0]=e[0];
new->coord[1]=e[1];
new->next =NULL;
s->head=new;
return 1;
}
element * current=s->head;
while(current != NULL) {
if(coord_equal(current->coord,e)) {
return 0;
}
if(current->next ==NULL){
break;
}
current=current->next;
}
element * new=malloc(sizeof (element));
new->coord[0]=e[0];
new->coord[1]=e[1];
new->next = NULL;
current->next=new;
return 1;
}
【问题讨论】:
-
while(current != NULL)...current->next=new;。看起来current在最后一行是 NULL。 -
不,当 current->next 为 null 时它会中断,因此 current 不为 null,它是这样编码的,因此只有一个元素的集合也会被检查
标签: c memory-leaks