林锐那本书中的一个简单问题

unbutun 2010-03-16 09:31:12
void GetMemory2(char **p, int num)

{

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

}

void Test(void)

{

char *str = NULL;

GetMemory(&str, 100);

strcpy(str, "hello");

printf(str);

}

请问运行Test函数会有什么样的结果?

答:

(1)能够输出hello

(2)内存泄漏




这个内存不是应该释放了么? 是不是就相当于有一块内存的地址,然后往里写,而这块内存对于Test函数来说是在非法使用?
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-03-16
  • 打赏
  • 举报
回复
malloc动态分配的要释放。
bobo364 2010-03-16
  • 打赏
  • 举报
回复
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);//c中分配了内存,没有free()是不可能自动被释放掉的
}

void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
某某9 2010-03-16
  • 打赏
  • 举报
回复
是不是需要把内存free掉啊
昵称很不好取 2010-03-16
  • 打赏
  • 举报
回复
malloc分配的内存,没有free是不会释放的
void Test(void)
{
char *str = NULL;
GetMemory2(&str, 100);
strcpy(str, "hello");
printf(str);
free(str);//在这里加个free
}
Strive4love 2010-03-16
  • 打赏
  • 举报
回复
不是非法使用,在
void GetMemory2(char **p, int num)

{

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

}
中,参数char **p,指针的指针,传入&p,能够修改p的指向,
p确实指向了(char *)malloc(num)这块区域,malloc对应free,这个程序明显没有free(p),每执行一次,分配
(char *)malloc(num)大小的内存不释放。
拉卡尼休 2010-03-16
  • 打赏
  • 举报
回复
程序退出前堆上内存不手动释放就一直占用,显然这里调用malloc申请的空间没有被释放嘛,可以再写一个释放空间的函数void ReleaseMemory2(char **p);调用free释放它。
liuxingjin 2010-03-16
  • 打赏
  • 举报
回复
没看到free()

69,371

社区成员

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

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