代码之家  ›  专栏  ›  技术社区  ›  Gideon Kogan

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

  •  -1
  • Gideon Kogan  · 技术社区  · 2 年前

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

    #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);
    }
    
    2 回复  |  直到 2 年前
        1
  •  2
  •   ikegami Gilles Quénot    2 年前

    你分配了一块内存,然后释放了那块内存。这就是要做的全部。

    我们说我们释放了一个指针,但这只是一个简写。我们实际上解放了指针所指向的东西。 e->le_fun 指向一个函数。您从未分配函数使用的内存,因此您不负责释放它。调用 free( e->le_fun ) .

        2
  •  1
  •   unwind    2 年前

    你什么都不用做。

    函数指针只是一个保存在结构中的值,因此当您 free() 分配。