free (p); p = NULL;

刘艳明 2013-09-16 04:23:09
char *p = "Hello";
free (p);
p = NULL;
printf("%s\n", (p) ? p : "NULL");

为什么出现
Segmentation fault (core dumped)

将free(p)注释掉是正确的
...全文
112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-09-16
  • 打赏
  • 举报
回复

char *p = "Hello";
//这个内存地址不需要手动释放,系统会帮你释放的!
//只有new/malloc分配的内存才需要手动释放
LAOYDONG 2013-09-16
  • 打赏
  • 举报
回复
"hello"是一个字符串常量,谁free谁死。
海的神话 2013-09-16
  • 打赏
  • 举报
回复
你没调用malloc()分配内存,干嘛调用free呢。 char *p = "Hello"; 字符是存在在常量存储区,不需要你进行释放内存啊
图灵狗 2013-09-16
  • 打赏
  • 举报
回复
free只能释放由malloc所申请的内存,否则结果难料,如非要用free的话,可以这样:

char* p = (char*)malloc(20);
strcpy(p, "Hello");
free(p);
p = NULL;
引用 楼主 leleing 的回复:
char *p = "Hello"; free (p); p = NULL; printf("%s\n", (p) ? p : "NULL"); 为什么出现 Segmentation fault (core dumped) 将free(p)注释掉是正确的
qq120848369 2013-09-16
  • 打赏
  • 举报
回复
char *p = "Hello"; 不这个不是malloc的堆内存,不能free。
独孤的根号3 2013-09-16
  • 打赏
  • 举报
回复
free 和malloc 对应的,释放的是动态分配的内存,你现在释放的是一个栈指针,不出问题才怪呢 解释的也不是很清楚,坐等楼下解释更详细点

69,371

社区成员

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

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