malloc与free的凝问

weixin_40290083 2019-11-12 11:53:07
//定义结构体
struct Test{
char str[100];
int a;
};

//申请N个Test内存空间,并返回该内存首地址。
struct test * createTest(int n){
struct Test * test = (struct Test *) malloc(sizeof(struct Test) * n);
return test;
}

main(){
struct Test * test = createTest(5);
for(int i =0;i < 5;i++){
printf("%d\t\t%s",test->a,test->str);
}
//释放test所占用的内存空间。
free(test);

}

凝问是:test的内存申请是在createTest函数中傅malloc申请的,但是内存的释放是在main函数(也有可能是在其它非main函数和非createTest)中调用free释放的,这样做是否正确。还是说在createTest函数中申请,一定要在createTest函数中释放。
...全文
44 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-11-12
  • 打赏
  • 举报
回复
没问题的,申请和释放可以不在一个函数里。但是申请时得到地址,在free是也需要是这个地址。
摺耳喵 2019-11-12
  • 打赏
  • 举报
回复
假如你要买一个塑料袋装东西,等东西用完袋子就可以扔掉了。 你的问题就好比说你是要买完袋子就扔掉,还是要用完再扔
铖邑 2019-11-12
  • 打赏
  • 举报
回复
如果在一个函数里面申请了,就要在这个函数里面释放的话,这样做无非是两种可能性。其一就是申请了之后,在返回之前就释放了,那么这样做的意义何在呢?倒还不如申请栈空间就好了;还有一种就是函数返回之后,再次调用同一个函数去释放空间,那么就是说这个函数同时具备两种功能,申请和释放空间,通过不同的参数来控制流程走向,但是这样做不觉得很乱吗?函数的设计需要规划的,杂烩式功能的函数,不是一种好的设计

69,382

社区成员

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

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