如何释放带有函数指针成员的结构体?
问题解答
你完全不用为函数指针的释放问题焦虑,核心原因如下:
- 函数指针存储的是代码段中函数的内存地址,这块内存并非通过
malloc/calloc/realloc等堆分配函数申请,根本不需要手动释放。 - 当你调用
free(e)时,只会释放ExampleNew里通过malloc申请的堆内存(包含结构体本身以及紧跟其后的double数组内存),不会触及le_fun指向的函数代码区域,完全不会触发未定义行为。
你的示例代码中,test函数的写法是完全正确的,free(e)已经完成了所有必要的内存释放操作,不需要额外处理le_fun成员。
另外你提到的“创建指向该函数指针的指针”确实没有必要——函数指针本身只是结构体里的一个普通指针变量,它占用的内存属于结构体的堆内存空间,结构体被释放时,这个变量的内存会被回收,但它指向的函数代码不会受到任何影响。
内容的提问来源于stack exchange,提问作者Gideon Kogan
相关产品推荐
相关产品推荐

