У меня есть функция, которая при вызове берет поле struct Pieces*
из struct Torrent
и инициализирует его согласно информации, содержащейся в массиве символов.
Вот как выглядит вызов функции (metadata.c: 230):
get_pieces(t.pieces, &t.num_pieces, data);
В функции get_pieces()
я инициализирую t.pieces
, вот так (metadata.c: 65):
pieces = calloc(*num_pieces, sizeof(struct Piece));
Однако, когда я запускаю valgrind, он говорит:
==8701== 76,776 bytes in 1 blocks are definitely lost in loss record 634 of 634
==8701== at 0x4C28349: calloc (vg_replace_malloc.c:467)
==8701== by 0x4025A4: get_pieces (metadata.c:65)
==8701== by 0x402CDB: init_torrent (metadata.c:230)
==8701== by 0x404018: start_torrent (torrent.c:35)
==8701== by 0x40232E: main (main.c:17)
, хотя указатель, t->pieces
, все еще доступен, когда моя программа завершает работу и может быть свободна. Почему эта утечка памяти?
Полный исходный код доступен по адресу https://github.com/robertseaton/slug.