7.1.3 试图修改常量

    程序中出现的字符串常量和其他全局常量(如全局const常量),是存放在.rodata里面的,.rodata内存页面是不能修改的,试图对常量进行修改,会引发内存错误,如代码7.2所示。

    代码7.2 试图修改常量引发内存错误ModifyConstant


    <————————————文件名:example702.cpp———————————————> 01 #include<iostream> 02 using namespace std; 03 int main() 04 { 05 char*p="Hello,C++";//p指向一个常量字符串 06 cout<<p[1]<<endl;//输出字符串的第2个字符 07 p[1]='G';//试图修改常量字符串,程序出错 08 cout<<p<<endl; 09 return 0; 10 }

    【代码解析】代码第7行,由于试图修改常量字符串,所以会导致程序出错。

    编译运行时,会出现如图7.1所示对话框。

    7.1.3 试图修改常量 - 图1

    图 7.1 试图修改常量引发内存错误

    注意

    此处的常量不包括局部const常量,从某种意义上说,在函数参数前加上const修饰符,只是给编译器做类型检查用的,编译器禁止修改这样的变量。但这并不是强制的,你完全可以用强制类型转换绕过去,一般也不会出错。