使用链表的C Set实现内存泄漏

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

最佳答案

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

类似这样的事情:

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

希望这有帮助。

关于使用链表的C Set实现内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357791/

相关文章:

c - 如何将代码从终端重定向到绘图应用程序?

c - 对正在写入的文件调用 stat() 的结果是什么?

java - Activity 已泄漏窗口 com.android.internal.policy.impl.PhoneWindows$DecorView{42d9a800

无法从串口读取超过八个字节

c++ - 从 c/c++ 独立应用程序中的 zip 文件导入 python 包

c++ - SDL/OpenGL 双缓冲内存泄漏

c - c中的内存泄漏错误

ruby-on-rails - Arel::Table @aliases 在 Rails 5 中使用时内存泄漏

javascript - 倒计时中使用 Angular 的 $interval 避免内存泄漏

c - 如何在 C 和 Perl 中反转一个句子