为什么释放指针会导致程序中止?

时间:2014-10-27 16:26:10

标签: c pointers function-pointers

我一直在处理个人项目的函数指针和结构。当我编译并运行我的代码时,我得到了一个"中止(核心转储)"我试图释放指针时出错。

我有以下代码(不包括导入):

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;
}

如果有人能解释为什么会这样,我会非常感激。

2 个答案:

答案 0 :(得分:3)

您只需要free动态分配的内容(例如,使用callocmalloc或该系列中的任何功能。)

您从未分配内存,因此您无需释放内存。将随机指针传递给free函数会使其行为异常。

答案 1 :(得分:0)

找到这个:http://bytes.com/topic/c/answers/504956-do-you-have-delete-function-pointer用户说:

  

你不应该删除函数指针。该功能位于   在可执行文件中的某个地方当你执行你的程序时,   OS会将可执行文件加载到内存中。当你的程序分配一个   函数指针的值,它将获得指向的值   可执行文件中函数的位置。如果你删除它   你的程序,你的编译器很可能会抱怨你   试图删除不是指针的对象。

...所以即使你的编译器没有给出任何错误,它也很可能在执行期间失败