C使用链接列表内存泄漏设置实现

时间:2017-04-11 23:24:40

标签: c memory-leaks

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;
}

1 个答案:

答案 0 :(得分:-1)

我认为正确的做法是在每个malloc之后验证是否确实已分配,如果没有,则应该释放该内存区域并退出该函数。

这样的事情:

value = malloc();
if (value){
//value was allocated correctly
//do the things you want with it
free(value);
}
else{
return 0; //exit your function
}

希望这有帮助。