Моя функция remove_duplicates должна избавиться от повторяющихся значений данных в связанном списке. Однако, когда он достигает точки в связанном списке, например, если связанный список равен L = {10,10,20,30,30,30,40,50}
, то вывод L = {10,20,30,(some random int value like 23687328),50}
, когда он должен быть L = {10,20,30,40,50}
. Кроме того, я проверяю утечку, и Валгринд говорит мне, что я где-то пропадаю, но я не могу ее найти.Освобождение и удаление дубликатов из связанного списка?
typedef struct node_t
{
int data;
struct node_t *next;
} node;
void remove_duplicates(node * head)
{
node* temp;
while (head != NULL && head->next != NULL)
{
while (head->data == head->next->data)
{
temp = head->next->next;
free(head->next);
head->next = temp;
}
head = head->next;
}
free(temp);
}
Я использую VALGRIND --leak-чек = да ./llistprac и выход
==24802== 80 (16 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 5 of 5
==24802== at 0x4A069EE: malloc (vg_replace_malloc.c:270)
==24802== by 0x400575: append (in /home/llistprac)
==24802== by 0x4006D9: main (in /home/llistprac)
==24802==
==24802== LEAK SUMMARY:
==24802== definitely lost: 16 bytes in 1 blocks
==24802== indirectly lost: 64 bytes in 4 blocks
==24802== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 6 from 6)
Достаточно интересно (по крайней мере, для меня), когда я не освобождаю температуру в конце, это работает! Но тогда я все еще просачиваюсь ... – Bourezg
Когда вы говорите, что Valgrind говорит вам, что вы просачиваетесь, но вы не можете найти его, какие аргументы вы используете и что такое выход Valgrind? – kbshimmyo
Вам не нужно освобождать темп. – Duck