C语言中free函数的使用详解

C语言中free函数的使用详解,第1张

概述free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。

free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。

 注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p)这句语句,如果p 是NulL 指针,那么free 对p 无论 *** 作多少次都不会出问题。如果p 不是NulL 指针,那么free 对p连续 *** 作两次就会导致程序运行错误。

 看一个程序

#include <stdio.h>#include <stdlib.h>int main(){  char * name = NulL;  free(name);  free(name);  free(name);    printf("no problem11111111\n");  name = (char *) malloc(10);  if(name)  {    printf("allocate successful\n");  }  else  {    printf("allocate Failed\n");  }  free(name);  free(name);    printf("no problem2222222\n");  return 0;}

运行结果:

这个程序正好验证了上面的注意事项。

为了避免出现这个错误,自己写了一个函数:

voID myfree(voID ** point){  if(*point != NulL)  {    free(*point);    *point = NulL;  }}

这个函数将一级指针的地址作为菜蔬传入,这样就可以对一级指针进行 *** 作。每次用free释放完空间,都将一级指针置为NulL,这样就避免了重复释放时程序崩溃。

将这个函数应用到刚才的程序中就是:

#include <stdio.h>#include <stdlib.h>voID myfree(voID ** point){  if(*point != NulL)  {    free(*point);    *point = NulL;  }}int main(){  char * name = NulL;    myfree((voID**)&name);  myfree((voID**)&name);  myfree((voID**)&name);    printf("no problem11111111\n");  name = (char *) malloc(10);  if(name)  {    printf("allocate successful\n");    printf("地址为: %p\n",name);  }  else  {    printf("allocate Failed\n");  }  myfree((voID**)&name);  myfree((voID**)&name);    printf("no problem2222222\n");  return 0;}

 可以发现程序已经没有错误。

但是还有一个问题需要处理: 每次调用myfree函数的时候都需要取一级指针的地址而且需要强制类型转换成voID** ,也就是每次都要写(voID**)&point,这样很麻烦。

其实我们可以用带参数的宏定义来简化代码,宏定义如下:

#define FREE(p) myfree((voID **)&p)

 应用宏定义后的完整代码:

#include <stdio.h>#include <stdlib.h>#define FREE(p) myfree((voID **)&p)voID myfree(voID ** point){  if(*point != NulL)  {    free(*point);    *point = NulL;  }}int main(){  char * name = NulL;    FREE(name);  FREE(name);  FREE(name);    printf("no problem11111111\n");  name = (char *) malloc(10);  if(name)  {    printf("allocate successful\n");    printf("地址为: %p\n",name);  }  else  {    printf("allocate Failed\n");  }  FREE(name);  FREE(name);    printf("no problem2222222\n");  return 0;} 

好了今天就写到这里了,希望对你有帮助,如有不正确的地方,还请指点。多谢~~

总结

以上是内存溢出为你收集整理的C语言中free函数的使用详解全部内容,希望文章能够帮你解决C语言中free函数的使用详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1245056.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存