0

要求对此设计选择进行合理检查。

我正在通过创建一个可以接受字符串或数字节点类型的堆数据结构在 C 中编写堆排序。(我正在创建自己可以排序的私有堆)

堆中的节点是 void*,它们被取消引用以执行比较操作。Heap 结构将每个节点的大小存储在 Heap.nodesize 中,如果节点是字符串,则为 -1。

插入节点时,会为 void* 分配内存。如果 Heap.nodesize 为 -1,则将 strlen(val) 传递给 malloc,否则将 Heap.nodesize 传递给 malloc。

执行比较时,如果 Heap.nodesize 为 -1,则使用 strcmp,否则使用布尔运算符作为数值。

当堆被释放时,我计划循环并释放每个 void*。此时free会知道每个节点要释放多少字节?

4

2 回答 2

3

您不需要知道最初的malloced 大小。您只需将malloc()返回的指针传递给free().

ssize_t size = 400;
void* p = malloc(size);
// Do whatever with p
free(p);
于 2012-11-18T00:42:51.650 回答
0

free不需要知道字节数,就像'Jonathon Reinhart'所说的那样使用它。TCPL的第8章中malloc有一个简单的实现。只要阅读它,你就会知道它是如何工作的,而不需要知道你的大小动态分配的内存。希望它有效!freefree

于 2012-11-18T02:52:21.243 回答