为什么上面的方法有效?
char*p = new char[4];
p = "hey";
p = "jey";
但这不是吗?
char* p = new char[4];
p = "hey";
p[0] = 'j';
第二个示例导致段错误。
在第一个例子中,“jey”是否覆盖了“hey”
?
最佳答案
"hey"
或 "jey"
等字符串文字是常量,您无法修改。
声明
p = "hey";
p = "jey";
使p
指向指定字符串的第一个元素。虽然语言允许这样做,但您丢失了从 new
获得的指针信息,现在出现了内存泄漏。
您在第二个示例中遇到了同样的问题,但是当您尝试修改字符串文字时出现了段错误
p[0] = 'j';
假设 “hey”
存储在地址为 0x01
、0x02
和 0x03
的一些只读存储器中对于三个字符,p
指向 0x01
。执行 p[0] = 'j'
您试图更改地址 0x01
中存储的值,但由于它是只读内存,您会遇到段错误。
关于c++ - 改变字符指针的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762875/