首页 文章

使用任意节点类型在C中创建堆 . 如何释放它?

提问于
浏览
0

要求对这种设计选择进行健全性检查 .

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

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

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

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

当堆被释放时,我计划循环并释放每个void * . 此时将自由知道每个节点要释放多少字节?

2 回答

  • 3

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

    ssize_t size = 400;
    void* p = malloc(size);
    // Do whatever with p
    free(p);
    
  • 0

    free don 't need to know the number of bytes,just use it as ' Jonathon Reinhart'说 . 在TCPL的第8章中有一个简单的 mallocfree 实现 . 只需阅读它,你就会知道 free 如何工作而不知道动态分配内存的大小 . 希望它有效!

相关问题