C语言 free()问题

ZPH2254 2012-04-18 08:16:56



int main(void)
{

char *handle_string;
handle_string = (char *)calloc(12,sizeof(char));
handle_string = "d:/test.txt";
printf("%s , %d\n",handle_string,strlen(handle_string));
free(handle_string);

return 0;
}




这段代码运行的时候,会出现堆损坏的错误,free(handle_string,没有办法释放内存。为什么???
...全文
246 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-04-19
  • 打赏
  • 举报
回复
char *不能用=赋值,只能用=初始化。
lkxd2011 2012-04-19
  • 打赏
  • 举报
回复
strcpy赋值,才能释放~~
AnYidan 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

handle_string = (char *)calloc(12,sizeof(char));
handle_string = "d:/test.txt";

你改变handle_string的指向了。
肯定能够没发 free啊。
[/Quote]

++
ghlhy0505 2012-04-19
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110805/16/4d0528be-dd1f-4c80-b280-684c9eb8926c.html

这个问题我也问过,这是我当时的帖子,希望对你有帮助
ZPH2254 2012-04-18
  • 打赏
  • 举报
回复
确实,我之前写java的,习惯了直接赋值,在C语言里经常忘了要用strcpy
evencoming 2012-04-18
  • 打赏
  • 举报
回复
然后再释放就没问题了。
不能直接 handle_string=...
evencoming 2012-04-18
  • 打赏
  • 举报
回复
你是想赋值吧?字符串赋值是
strcpy。
这样:
strcpy(handle_string , "d:/test.txt");
jsy5211 2012-04-18
  • 打赏
  • 举报
回复
参考学习这个:
http://wenku.baidu.com/view/6d02b60203d8ce2f00662389.html
ZPH2254 2012-04-18
  • 打赏
  • 举报
回复
那是不是可以不用free()了,如果是不用free()了,那手动分配了地址空间总得释放吧
evencoming 2012-04-18
  • 打赏
  • 举报
回复
handle_string = (char *)calloc(12,sizeof(char));
handle_string = "d:/test.txt";

你改变handle_string的指向了。
肯定能够没发 free啊。
jsy5211 2012-04-18
  • 打赏
  • 举报
回复
handle_string = "d:/test.txt"; 这个字符串是常量 不能free对应的地址
printf("%s , %d\n",handle_string,strlen(handle_string));
free(handle_string);

70,023

社区成员

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

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