如何释放带有函数指针成员的结构体?

问题描述 投票:0回答:1

我正在分配一个带有函数指针的结构。显然,我必须在程序结束时释放该结构。但是,释放函数指针会导致未定义的行为。我该怎么做呢?我试图创建一个指向函数点的指针,但它不起作用,对吧?附上一个最小的例子。

#include <stdlib.h>
#include <stdio.h>

int le_double(void *a, void *b){return *(double *)a < *(double *)b;}
 
typedef struct example
{
   double* data;  
   int (*le_fun)(void *, void *);
} Example;

Example* ExampleNew(int nItems)
{
   int size = sizeof(Example) + nItems * sizeof(double);
   Example* e =  malloc(size);
   e->data = (double *) (e + 1);
   e->le_fun = le_double;
   return e;
}
 
void test(int nItems)
{
   Example* e = ExampleNew(nItems);
   free(e);
}

int main()
{
   int nItems = 5;
   test(nItems);
}
c pointers struct malloc
1个回答
1
投票

你什么都不用做。

函数指针只是保存在结构内部的一个值,因此当您

free()
分配时它会被释放。

© www.soinside.com 2019 - 2024. All rights reserved.