我必须在通用堆栈上移交复杂数据类型的freefunction。
我在测试版中的功能:
void freefn(time *element) {
printf("%s\n",element->day);
free(element->day);
}
主要:
GenStackNew(&dates,sizeof(time),freefn);
在我的API中:
if(s->freefn!=NULL) {
for (i = 0; i < s->allocLength; i++) {
s->freefn((char *) s->elems + i * s->elemSize);
}
}
如果我以这种方式编译它,编译器会说:
将“
void (time *)
”传递给的不兼容指针类型 “void (*)(void *)
”类型的参数。当我将元素作为void *
移交然后将其转换为struct time*
时,它会释放错误的内存。
编辑: 如果我这样投:
void freefn(void *element) {
time *telement = (time*)element;
printf("%s\n",telement->day);
free(telement->day);
}
出现此错误消息: ./gentest3':free():指针无效:0x0000000000400bf7