问题描述:
今天在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语言小白一名,请勿见笑 ~ ~