这样的空间如何free

superrg 2004-08-16 03:43:39
char *testfree;//指针声明
testfree = (char *)malloc(8 * sizeof(char));//分配空间
testfree = "abcdefg";//指针指向字符串地址
free(testfree);//这里出错,如果才能把已分配的空间free掉呢?
...全文
81 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
doolin 2004-08-16
  • 打赏
  • 举报
回复
‘=’操作改变了testfree,使malloc分配的空间失效,所以free会失败。
这样操作就会成功:
strcpy(testfree,"abcdefg");
ehhl 2004-08-16
  • 打赏
  • 举报
回复
楼上正解,要么不分配,要么用strcpy,还是没必要分配了
lemon520 2004-08-16
  • 打赏
  • 举报
回复
char *testfree;//指针声明
testfree = (char *)malloc(8 * sizeof(char));//分配空间
testfree = "abcdefg";//到这里时你malloc的空间由于没有指针来引用了,已经无法释放了。所以到这里之间要free(testfree);
free(testfree);//由于你的testfree指向的已经不是你malloc出来的内存了,所以free要出错

你可以这样改:
char* testfree;
testfree = (char *)malloc(8 * sizeof(char));
strcpy(testfree,"abcdefg");
free(testfree);
superrg 2004-08-16
  • 打赏
  • 举报
回复
to yaozijian110():
但要是不小心写上了
testfree = (char *)malloc(8 * sizeof(char));//分配空间
那么这部分空间在调用了
testfree = "abcdefg";
是否无法free导至memory leak呢??
yaozijian110 2004-08-16
  • 打赏
  • 举报
回复
我猜你的意思是,分配8个字符的空间用来存放"abcdefg"。实际上这是不必要的,
系统会自动为"abcdefg"分配空间的,也会自动释放它占有的空间,所以只要这样写就行了:

char *testfree;

testfree = "abcdefg";

69,373

社区成员

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

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