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



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

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

像这样:

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

希望这有帮助。

最新更新