C语言问题记录之Conflicting types for ‘free

问题描述:

今天在XCode中尝试练习C语言,使用malloc分配堆内存空间。但是想调用free释放堆内存空间时,Xcode编译失败,并且提示:Conflicting types for ‘free’

int main(int argc, const char * argv[]) {
    
    
    int a = 10;
    int b = 20;
    int * r = IntOperate(&b,&a, MULT);
    printf("MULT : %d \n",*r);
    r = IntOperate(&b,&a, MINS);
    printf("MINS : %d \n",*r);
    r = IntOperate(&b,&a, DIV);
    printf("DIV : %d \n",*r);
    r = IntOperate(&b,&a, ADD);
    printf("ADD : %d \n",*r);
    
    free((void*)r);  //XCODE 提示:Conflicting types for 'free
    return 0;
}

原因分析:

由于Xcode环境中 free方法的声明有多个,无法隐士导入正确的free方法实现。造成了报错

解决方案:

在使用之前,没有main方法之前,显示声明一下free方法的签名信息,便于编译器链接正确的free的实现。

//新增该方法声明
extern void free(void*);

int main(int argc, const char * argv[]) {
    
    
    int a = 10;
    int b = 20;
    int * r = IntOperate(&b,&a, MULT);
    printf("MULT : %d \n",*r);
    r = IntOperate(&b,&a, MINS);
    printf("MINS : %d \n",*r);
    r = IntOperate(&b,&a, DIV);
    printf("DIV : %d \n",*r);
    r = IntOperate(&b,&a, ADD);
    printf("ADD : %d \n",*r);
    
    free((void*)r);  //此时Xcode编译成功
    return 0;
}

本人C语言小白一名,请勿见笑 ~ ~

猜你喜欢

转载自blog.csdn.net/dirksmaller/article/details/108845178