C_内存非法访问问题

hfutwangyd 2013-05-17 10:56:06

#include <stdio.h>

char *func(void)
{
char *str = "Hello world";
return str;
}

int main(void)
{
char *p = NULL;
p = func();

return 0;
}

这段代码有缺陷吗?会存在非法内存访问吗?
...全文
368 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
futurepi 2013-05-18
  • 打赏
  • 举报
回复
2楼和10楼说的很清楚了, 常量区的内容当然不会被更改了
worldy 2013-05-17
  • 打赏
  • 举报
回复
常量存储区的内存是不允许被重写的,是作为代码的一部分被加载,如果你试图修改常量存储区的内容,编译将会报错
Jake443403168 2013-05-17
  • 打赏
  • 举报
回复
引用 4 楼 hfutwangyd 的回复:
[quote=引用 2 楼 Jake443403168 的回复:] 编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
常量存储区中的内容不会改变么?比如str指向的内存不会在程序的后续运行中被覆盖吗?[/quote] char *str = "Hello world"; <===> const char *str = "Hello world";
hfutwangyd 2013-05-17
  • 打赏
  • 举报
回复
引用 2 楼 Jake443403168 的回复:
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
常量存储区中的内容不会改变么?比如str指向的内存不会在程序的后续运行中被覆盖吗?
www_adintr_com 2013-05-17
  • 打赏
  • 举报
回复
不会 func 返回的其实不是局部变量, 而是指向只读数据段内的一个指针
Jake443403168 2013-05-17
  • 打赏
  • 举报
回复
编译器编译程序时将"hello,world"这个字符串常量存放在了常量存储区中,定义指针时char *str="hello,world"; str指向的是常量态存储区地址,所以尽管从函数返回了,但是常量存储区存储的字符串还是有效的,常量存储区要在程序结束的时候才释放!
kakashi0309 2013-05-17
  • 打赏
  • 举报
回复
面试题 工作中谁会写这样的代码啊

69,371

社区成员

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

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