c语言在子函数中使用malloc,会自动free吗?return后我该怎么办?

、浅浅笑 2018-10-04 04:40:25
如题,我在子函数中用malloc申请了空间,返回一个数组,但是return 0后我发现没有执行接下来的free,我在主函数中该如何释放这个空间?求教各位。

/*子函数体片段*/
return str;
free(str);//释放
str = NULL;//置空
}

int main()/*主函数*/
{
printf("%s", get_num_bit());
system("pause");
return 0;
}

如何在主函数中释放申请空间?
...全文
1856 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2018-10-08
  • 打赏
  • 举报
回复
可以用智能指针
hongwenjun 2018-10-04
  • 打赏
  • 举报
回复
定义的函数 return 后,后面语句就不执行,也可以用 if判断,多个 return,返回不同的结果
char* get_num_bit()
{
    /*子函数体片段*/
    static  char* buf = (char*)malloc(1024 * 64);
    strcpy(buf, "hello world!");
    return buf;
}
可以试试这样,函数多次使用,也不会内存浪费了
zangfong 2018-10-04
  • 打赏
  • 举报
回复 2
你的这个程序很简单,虽然在子函数中没有free,确实有内存泄漏,但是整个程序执行完成之后,系统还是会回收你malloc申请的str的空间的,因此对于你现在的这段程序来说,也不会对系统造成啥负担。 子函数到了return,程序就已经结束并返回相关结果了,renturn后面的代码是肯定不会运行了的。如果要free,可以这样
#include<stdio.h>
#include<stdlib.h>

char * get_num_bit()
{
    /*子函数体片段*/
    char * str = (char*)malloc(sizeof(char)*100);
    str = "hello world!";
    return str;
}

int main()/*主函数*/
{
    char *p = get_num_bit();
    printf("%s\n",p);
    system("pause");
    free(p);
    return 0;
}
赵4老师 2018-10-04
  • 打赏
  • 举报
回复
3、4行删掉。
main返回后,程序对应进程退出,操作系统会自动释放。
如果想自己free,可将函数的返回值保存到比如一个char*类型的变量s中,等不用时free(s);即可。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧