[英]Free array of void pointers in C
我正在C中实现一个最小/最大堆,并且总体上尝试这样做,因为将来的项目将需要它。
这个想法是将void*
一维数组与通用比较器int (*cmp) (void*,void*)
。
我的结构如下所示:
typedef struct heap {
size_t capacity;
size_t size;
int (*cmp)(void *, void *);
void **data;
} Heap;
我在对heapalloc的调用中为void **data
分配了空间:
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;
}
一切运行良好,直到必须释放数据。 下面的调用产生了段错误,我不明白为什么---我只调用了malloc一次,数据是从中返回的指针!
void
heapfree(Heap *h)
{
free(h->data);
free(h);
}
任何帮助,将不胜感激。 我看过很多关于类似主题的文章,但是到目前为止,我发现的任何内容都没有实际起作用。 (使用gcc编译;因此,sizeof(void *))
Heap* h = malloc(sizeof(Heap*));
是错的; 你要
Heap *h = malloc(sizeof *h);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.