free()

ikuaifenglea 2009-04-21 10:22:28
4.#include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险



free()对str操作很危险
是什么意思?
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lq651659889 2009-04-21
  • 打赏
  • 举报
回复
学习下
baiwei156 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengde007 的回复:]
引用 3 楼 baiwei156 的回复:
说明str压根没有能成功的分配到空间

而free却要求要释放了空间,所以说很危险

修改如下:

C/C++ code
#include <stdio.h>
#include <stdlib.h>
void getmemory()
{
char *p=(char *) malloc(100);
strcpy(p,"hello world");
return p;
}
int main( )
{
char *str= getmemory() ;
printf("%s/n",str);
free(str);
r…
[/Quote]
5楼画红线画的不对啊

newborn2012 2009-04-21
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <stdlib.h>
void getmemory(char **p)
{
*p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(&str);
printf("%s/n",str);
free(str);
return 0;
}
baiwei156 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mengde007 的回复:]
3楼的错了吧;
[/Quote]

呵呵,忘了改函数前的返回类型了,刚测试过,可以了


char *getmemory()
{
char *p=(char *) malloc(100);
strcpy(p,"hello world");
return p;
}


int _tmain(int argc, _TCHAR* argv[])
{

char *str= getmemory() ;
printf("%s/n",str);
free(str);


system("pause");

return 0;
}

lingyin55 2009-04-21
  • 打赏
  • 举报
回复
ms哪里见过的一道笔试题,原因楼上都说了。
[Quote=引用楼主 ikuaifenglea 的帖子:]
4.#include <stdio.h>
#include <stdlib.h>
void getmemory(char *p)
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(str);
printf("%s/n",str);
free(str);
return 0;
}
程序崩溃,getmemory中的malloc 不能返回动态内存, free()对str操作很危险


free()对str操作很危险
是什么意思?
[/Quote]
mengde007 2009-04-21
  • 打赏
  • 举报
回复
3楼的错了吧;
mengde007 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baiwei156 的回复:]
说明str压根没有能成功的分配到空间

而free却要求要释放了空间,所以说很危险

修改如下:

C/C++ code
#include <stdio.h>
#include <stdlib.h>
void getmemory()
{
char *p=(char *) malloc(100);
strcpy(p,"hello world");
return p;
}
int main( )
{
char *str= getmemory() ;
printf("%s/n",str);
free(str);
return 0;
}
[/Quote]
我上面的测试过了;楼主可验证;
morris88 2009-04-21
  • 打赏
  • 举报
回复
  #include <stdlib.h> 
void getmemory(char **p)
{
*p=(char *) malloc(100);
strcpy(*p,"hello world");
}
int main( )
{
char *str=NULL;
getmemory(&str);
printf("%s/n",str);
free(str);
return 0;
}
baiwei156 2009-04-21
  • 打赏
  • 举报
回复
说明str压根没有能成功的分配到空间

而free却要求要释放了空间,所以说很危险

修改如下:

#include <stdio.h>
#include <stdlib.h>
void getmemory()
{
char *p=(char *) malloc(100);
strcpy(p,"hello world");
return p;
}
int main( )
{
char *str= getmemory() ;
printf("%s/n",str);
free(str);
return 0;
}

brookmill 2009-04-21
  • 打赏
  • 举报
回复
因为str不是从malloc得到的,特别是这个例子,就是NULL,所以很危险
在函数getmemory里面malloc得到的值给了p,但那只是形参,main里面str的值并没有变化,还是NULL
mengde007 2009-04-21
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getmemory(char *&p) //注意了;
{
p=(char *) malloc(100);
strcpy(p,"hello world");
}
int main( )
{
char *str=NULL; //此处你将str=null;导致了str和内存断绝了关系;所以下面要引用;
getmemory(str);
printf("%s\n",str);
free(str);
return 0;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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