如何将结构类型移交给泛型堆栈

时间:2016-11-14 18:23:24

标签: c generics

我必须在通用堆栈上移交复杂数据类型的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

0 个答案:

没有答案