я это (плохо) кодКак освободить память для указателя в C
void function(deq** dq, int data)
{
// TODO: add a new element at the end of the queue
deq *temp = (dequeue*)malloc(sizeof(dequeue));
deq *copy = (*dq);
temp->data = data;
if (copy == NULL) {
temp->next = NULL;
temp->prev = NULL;
(*dq) = temp;
}
else{
while (copy->next != NULL) {
copy = copy->next;
}
temp->prev = copy;
temp->next = NULL;
copy->next = temp;
(*dq) = temp;
}
//free(temp);
}
, что моя проблема в том, что я не могу бесплатно темп без сбоев программки есть способ решить эту проблему? и может кто-то сказать мне, почему, когда я использую это бесплатно, я не могу запустить программу, но с valgrind это работает ... так смешно.
==17186== HEAP SUMMARY:
==17186== in use at exit: 216 bytes in 9 blocks
==17186== total heap usage: 15 allocs, 6 frees, 360 bytes allocated
==17186==
==17186== 72 (24 direct, 48 indirect) bytes in 1 blocks are definitely lost in loss record 8 of 9
==17186== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==17186== by 0x400670: dequeue_push_front (dequeue.c:12)
==17186== by 0x400A1D: main (main.c:21)
==17186==
==17186== 144 (24 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 9 of 9
==17186== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==17186== by 0x400670: dequeue_push_front (dequeue.c:12)
==17186== by 0x400BA3: main (main.c:48)
==17186==
==17186== LEAK SUMMARY:
==17186== definitely lost: 48 bytes in 2 blocks
==17186== indirectly lost: 168 bytes in 7 blocks
==17186== possibly lost: 0 bytes in 0 blocks
==17186== still reachable: 0 bytes in 0 blocks
==17186== suppressed: 0 bytes in 0 blocks
==17186==
==17186== For counts of detected and suppressed errors, rerun with: -v
==17186== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Почему вы оба выдаете адрес через '* dq' и освобождаете его в конце функции? – aschepler
Я знаю, что бесплатно плохо, но если я прокомментирую это, тогда я получаю эти утечки памяти. – twistedhat
'free' is ** not ** bad. Это то, что вы должны сделать, чтобы очистить себя. Это просто нужно сделать правильно. – dbush