【发布时间】:2011-10-25 03:31:57
【问题描述】:
我有一个函数,当被调用时,它会从 struct Torrent 中获取一个 struct Pieces* 字段,并根据 char 数组中包含的信息对其进行初始化。
这是函数调用的样子(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获得。
【问题讨论】:
-
在哪里以及如何释放分配的内存?
-
他没有释放它,但仍然有对它的引用(或者至少他认为有对它的引用......)
标签: c memory memory-leaks valgrind