运行test函数有什么结果?

cy2005abc 2007-09-03 08:31:48
void setmemory(char **p, int num)



{ *p=(char *) malloc(num);}



void test(void)



{ char *str=NULL;



setmemory(&str,100);



strcpy(str,"hello");



printf(str);



}



运行test函数有什么结果?( )
//我觉得程序是正常运行的,另外问下malloc,free必需得在同一个函数里用吗??
谢谢
...全文
414 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zp_cool 2007-09-05
  • 打赏
  • 举报
回复
学习..
tpfly 2007-09-05
  • 打赏
  • 举报
回复
malloc 和free可以不在一个函数里,只要free里面传递malloc返回的地址就可以了。
在一些成熟的软件包中分配空间和释放空间也经常不在同一个函数里,这样的例子有readline函数库,gtk图形库等,分配资源和释放资源不可能放在同一个函数里。
如果malloc分配的内存不被free函数释放掉,那么会在进程结束时还给操作系统。以下是glibc手册对free的说明:
There is no point in freeing blocks at the end of a program, because all of the program's space is given back to the system when the process terminates.
没有必要在程序末尾释放内存块,因为在进程结束时程序的所有内存空间都归还给操作系统了。
Ninstein 2007-09-04
  • 打赏
  • 举报
回复
没问题 注意的是setmemory函数的参数 有二级指针
因此实参是 &str
cceczjxy 2007-09-04
  • 打赏
  • 举报
回复
没为题,只是这这代码中没释放内存的部分,可能存在内存泄漏.
如果在其它地方释放也行.
wang_wuhui 2007-09-04
  • 打赏
  • 举报
回复
这样当然可以了..
要释放内在很简单..在主函数后面加了free(str);
就可以了...
denzilyang 2007-09-03
  • 打赏
  • 举报
回复
函数写得太晦涩了,不是好风格
cnvb 2007-09-03
  • 打赏
  • 举报
回复
为什么不有free???难道内在不会泄露???
星羽 2007-09-03
  • 打赏
  • 举报
回复
没问题

注意malloc的东西记得free

在同一个进程里一般没问题

边城狂人 2007-09-03
  • 打赏
  • 举报
回复
没有问题,会打印出hello。但是应该会有内存泄漏。
在print后面加一句
free(str)就好了
manrenmanren 2007-09-03
  • 打赏
  • 举报
回复
程序应该是正常运行。
应该是需要的 否则函数退出,变量随着退栈会返回给系统的。
你再调用free时可能就不是刚才那个空间了
tpfly 2007-09-03
  • 打赏
  • 举报
回复
正常运行,str指向malloc分配的100字节空间。
malloc分配的空间在free被调用或进程结束的时候才被释放。

69,369

社区成员

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

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