指针和字符串的问题

发布于 2022-10-15 09:02:56 字数 293 浏览 22 评论 0

本帖最后由 sunguangshou 于 2011-04-20 16:33 编辑

一、
char *p="你好";
①//p指针是不是指向一个常量空间?
②//p指针是不是一个野指针呢?
二、
char *p=(char *)malloc(sizeof(char)*5);
p="你好";
①//这样的话是不是每次都要浪费不少空间呢?

请高手能够回答一下。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

物价感观 2022-10-22 09:02:56

楼主想表达的意思,我看不明白!!!????{:3_198:}{:3_198:}{:3_198:}

为你鎻心 2022-10-22 09:02:56

1,放在Data Segment里。
2,不是
3,不free肯定不行啥

有木有妳兜一样 2022-10-22 09:02:56

1不一定
2不是
3是

嘦怹 2022-10-22 09:02:56

char *p="你好";
①//p指针是不是指向一个常量空间?

是的,具体来说"你好"是一个字面字符串,本身是常量,会存放在程序的text段,也就是存放程序代码的那个段,这里是只读区域。指针p是栈里的一个变量,它指向那个字面字符串常量。

②//p指针是不是一个野指针呢?

野指针这个东西,我个人认为有素养的程序员,是没有野指针这个概念的。我申请的内存,由我的指针变量来管理,当内存释放之后,那个指针也就废弃了。除非再指向其它可用内存。

③char *p=(char *)malloc(sizeof(char)*5);
p="你好"; //这样的话是不是每次都要浪费不少空间呢?

实际上"你好"还是个字面字符串,编译器一样会把它放在text段中。

char *p=(char *)malloc(sizeof(char)*5); 这里分配了5个字节的堆内存
p="你好"; 这里又把指针指向了上面那个字面字符串常量。

实际上这里的问题不仅仅是浪费了5个字节的内存,更严重的是你泄漏了刚刚申请的5字节堆内存。更更严重的是你可能马上会执行free(p)操作,这几乎肯定会让你的程序报出一个“段错误”而退出。最最严重的是你可能忘了调用free(p)操作,给你的程序留下一个bug,最终客户或老板找上了你!

all!

深海蓝天 2022-10-22 09:02:56

1不一定
2不是
3是
hellioncu 发表于 2011-04-20 16:29

    1不一定 : 是神马意思?我觉得就是的啊?

夏末染殇 2022-10-22 09:02:56

1不一定 : 是神马意思?我觉得就是的啊?
zhuqing_739 发表于 2011-04-20 16:31

    操作系统、编译器都不确定,所以说不一定

奢望 2022-10-22 09:02:56

回复 3# zesu

    1. 字面字符串常量是在text段中
    3. free(p)肯定会出错的

戏剧牡丹亭 2022-10-22 09:02:56

回复 7# hellioncu

    这个我还真不知道有哪个系统哪个编译器,字面字符串常量是不在只读text段的

ζ澈沫 2022-10-22 09:02:56

回复  hellioncu

    这个我还真不知道有哪个系统哪个编译器,字面字符串常量是不在只读text段的
雨过白鹭洲 发表于 2011-04-20 17:29

    在CONST段。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文