我一直在处理个人项目的函数指针和结构。当我编译并运行我的代码时,我得到了一个"中止(核心转储)"我试图释放指针时出错。
我有以下代码(不包括导入):
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;
}
如果有人能解释为什么会这样,我会非常感激。
答案 0 :(得分:3)
您只需要free
动态分配的内容(例如,使用calloc
,malloc
或该系列中的任何功能。)
您从未分配内存,因此您无需释放内存。将随机指针传递给free
函数会使其行为异常。
答案 1 :(得分:0)
找到这个:http://bytes.com/topic/c/answers/504956-do-you-have-delete-function-pointer用户说:
你不应该删除函数指针。该功能位于 在可执行文件中的某个地方当你执行你的程序时, OS会将可执行文件加载到内存中。当你的程序分配一个 函数指针的值,它将获得指向的值 可执行文件中函数的位置。如果你删除它 你的程序,你的编译器很可能会抱怨你 试图删除不是指针的对象。
...所以即使你的编译器没有给出任何错误,它也很可能在执行期间失败