C中的空指针的自由数组



我正在用C实现一个最小/最大堆,并尝试在一般情况下实现它,因为我在未来的项目中需要它。

其想法是使用void*的1D阵列和通用比较器int (*cmp) (void*,void*)

我的结构如下:

typedef struct heap {
    size_t capacity;
    size_t size;
    int (*cmp)(void *, void *);
    void **data;
} Heap;

我在对heapalloc:的调用中为void **data分配了malloc空间

Heap*
heapalloc(size_t capacity, int (*cmp)( void *,  void *))
{
    Heap* h = malloc(sizeof(Heap*));
    if (h == NULL) 
    {
        perror("heapalloc/h:");
        return h;
    }
h->cmp = cmp;
h->data = malloc(capacity * sizeof(void*) );
if (h->data == NULL)
{
    perror("heapalloc/h->data:");
    free(h);
    return NULL;
}
h->size = 0;
h->capacity = capacity;
return h;

}

一切都很顺利,直到我不得不释放数据。下面的调用给出了一个seg错误,我不明白为什么——我只调用过malloc一次,数据就是从它返回的指针!

void
heapfree(Heap *h)
{ 
    free(h->data);
    free(h);
}

如有任何帮助,我们将不胜感激。我看过很多关于类似主题的帖子,但到目前为止,我没有发现任何真正有效的帖子。(使用gcc编译;因此sizeof(void*))

Heap* h = malloc(sizeof(Heap*));

是错误的;你想要

Heap *h = malloc(sizeof *h);

相关内容

  • 没有找到相关文章

最新更新