解析C ++“”x“处的指令引用”y“处的内存

时间:2010-01-07 11:12:49

标签: c++ string

我有以下程序给出了运行时错误:

  

*“x”处的指令引用“y”

处的内存      

无法写入内存。*

代码:

int main() {
    char *str1 = "Rain";
    char *&str2 = str1;    
    cout << str1 << str2 << endl;
    *str1 = 'M';
    cout << str1 << str2 << endl;

    //Here the error happens
    *str2 = 'P';          

    cout << str1 << str2 << endl;    
    return 0;
}

此错误的原因是什么。

1 个答案:

答案 0 :(得分:6)

问题是字符串文字在技术上是'char const pointer'。从右向左阅读指向不可修改字符的指针。由于与'C'的向后可比性,编译器可以自动转换为'char指针'。这并不意味着底层类型已经改变,因此修改底层const对象是未定义的行为。

char         *str1 = "Rain";  // Lie this is not a char* 
char const*   str9 = "Rain";  // This is the real type.

// String lieterals =>   "XXXXX" are char const*

如果你想修改字符串,你需要做的是声明一个数组。

char         str6[] = "Rain";
str6[0] = 'M';
*str6   = 'P';