【发布时间】:2014-10-27 16:26:09
【问题描述】:
我一直在为个人项目使用函数指针和结构。当我编译并运行我的代码时,当我尝试释放指针时出现“中止(核心转储)”错误。
我有以下代码(不包括导入):
typedef int (*intFunction)(int,int);
typedef struct {
int value;
intFunction func;
} ValueFunc;
int addInts(int a, int b){
return a + b;
}
int main(){
ValueFunc vf;
vf.value = 3;
vf.func = &addInts;
int y = vf.func(vf.value,4);
printf("%i",y);
free(vf.func);
return 0;
}
如果有人能解释为什么会发生这种情况,我将不胜感激。
【问题讨论】:
-
您正在尝试释放尚未动态分配的东西。
-
您是否尝试编译时出现完整警告?并且从函数指针到
void*的转换未加注释?见这里:coliru.stacked-crooked.com/a/8a9598c6388c6b3a -
为什么要释放那个可怜的函数指针?
-
我现在意识到我做错了什么。我错误地认为因为它是一个指针,所以我应该在完成后释放它。感谢您的帮助。
-
@SterlingTolley 不是每个指针都需要释放,只有你动态分配的指针。
标签: c pointers function-pointers