Valgrindは、この関数にメモリリークがありますが、それを見つけることができないと主張しています。これは、cのリンクリストを使用したセット実装の一部です。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であるように見えます。 – kaylum
current-> nextがnullのときにブレークしないため、現在の値はnullではなく、1つの要素だけを含むセットがチェックされるようにコード化されています –