为什么不能FREE呢?

yilin54 2010-03-18 09:24:27
typedef struct
{
int a;
char *b;
int c;
}A;
int main(int argc, char* argv[])
{
A* p=(A*)malloc(sizeof(A));
char* tmp="ss";
A a={1,tmp,2};
p=&a;
free(p);
//为什么这个P不能FREE啊?
p=NULL;
}
...全文
79 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy330206 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yuzl32 的回复:]
引用 4 楼 yilin54 的回复:
哦。,FREE是不是只能Free堆区域的内存啊?

malloc出来的内存,都可以free.刚才p掉了下包,LZ就不知道该释放谁了. :-)
[/Quote]

呵呵
yilin54 2010-03-18
  • 打赏
  • 举报
回复
感谢各位啦~~
yuzl32 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yilin54 的回复:]
哦。,FREE是不是只能Free堆区域的内存啊?
[/Quote]
malloc出来的内存,都可以free.刚才p掉了下包,LZ就不知道该释放谁了. :-)
柯本 2010-03-18
  • 打赏
  • 举报
回复
free 只能Free申请的内存指针.
yilin54 2010-03-18
  • 打赏
  • 举报
回复
哦。,FREE是不是只能Free堆区域的内存啊?
柯本 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
你的p现在已经不再指向堆中的内存了,当然不能free了
[/Quote]
已经说的很时白,一般动态申请的内存指针不能随便再赋值,否则free要出错的
cy330206 2010-03-18
  • 打赏
  • 举报
回复
p=&a;

楼主去掉这句试试,,我这里的编译器没有报错
昵称很不好取 2010-03-18
  • 打赏
  • 举报
回复
你的p现在已经不再指向堆中的内存了,当然不能free了

69,382

社区成员

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

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