您的位置:首页 > 编程语言 > C语言/C++

易犯的错误:C指针指向内存空间的常量区

2016-12-15 21:53 387 查看
根据下面语句写出结果:

char* s = “AAA”;
printf(“%s”, s);
s[0] = 'B';
printf(“%s”, s);

看到上面的短程序,或许我们会觉得显而易见,这里指针s指向了AAA,存放的是AAA的地址,所以第一个打印的结果为AAA,s[0]代表的是指向字符串AAA的首地址,所以会觉得第二个打印的结果就是BAA,即将第一个字符更改为了B。

然而在将上面的程序进行验证时,编译执行后发现只有第一个打印正确,接着是出现“段错误”!

这是因为指针虽然指向了AAA,但是AAA为字符串,存放在内存空间中的常量区(数据段的rodata段)。解释到这里我们就可以很容易的明白段错误的原因。对于常量的值是不可修改的,这也是非常容易因为不去考虑其存储空间而犯的错误。在此引以为戒,避免再次犯这样的错误!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐