free出错,*** glibc detected *** free(): invalid pointer: 0x0000007fbffffa44 ***

lxntd 2011-06-03 04:01:00
我在linux下编写了一个简单的测试程序,编译可以通过,但是运行时报了“*** glibc detected *** free(): invalid pointer: 0x0000007fbffffa44 ***”错误,我将错误定位在free语句上,但是不知道为什么该语句会出错。请求各位帮忙。程序如下:
int main()
{
char *A="hello world";
char *B;
B = (char*)malloc(strlen(A)+1);
B = A;
free(B);
return 0;
}
...全文
1639 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
G18469486484135 2011-06-05
  • 打赏
  • 举报
回复
字符串赋值 strcpy、、
firefoxbug 2011-06-05
  • 打赏
  • 举报
回复
char *A="hello world";是位于常量区的,你B里面存的是A的地址,这时候A和B是等价的,你要free(B)就是free(A),就会出错,因为free只能free calloc或者calloc或者reallloc出来的堆空间,常量区是不允许释放的···
Gary_Hendrix 2011-06-04
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 shi3590 的回复:]

B=A,A是const,free不了了。
[/Quote]
东大坡居士 2011-06-04
  • 打赏
  • 举报
回复
the memory you malloc not used, it become a wild pointer
树下 2011-06-04
  • 打赏
  • 举报
回复
上楼说的都对,我就不说了.
wh_liu 2011-06-04
  • 打赏
  • 举报
回复
呵呵,要明白指针的真谛
Athenacle_ 2011-06-04
  • 打赏
  • 举报
回复
只有你自己malloc来的内存才可以free。
这是最重要的
AnYidan 2011-06-03
  • 打赏
  • 举报
回复


B = A; 只能是指针赋值,除非你在c++ 中重载了操作符
lxntd 2011-06-03
  • 打赏
  • 举报
回复
我明白了,本意是要将A字符串的内容copy到B中的,不应该写B=A的,strcpy就好了。谢谢各位的帮助。
就想叫yoko 2011-06-03
  • 打赏
  • 举报
回复
楼上的都说完啦~~
gavindlutsw 2011-06-03
  • 打赏
  • 举报
回复
A是字符串常量,B=A的地址,freeB,就相当于freeA,当然释放不掉,而且申请的动态空间,没有被释放,内存泄露啦
c_losed 2011-06-03
  • 打赏
  • 举报
回复

B = (char*)malloc(strlen(A)+1);//这里申请了内存地址
B = A; // 这里指向了A地址 所以就崩了 编译器受不鸟见异思迁哇
shi3590 2011-06-03
  • 打赏
  • 举报
回复
B=A,A是const,free不了了。
大熊猫侯佩 2011-06-03
  • 打赏
  • 举报
回复
B值变为A的地址,A不是malloc分配的内存

69,371

社区成员

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

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