D G*_*Gul 4 c++ pointers string-literals
为什么以上工作?
char*p = new char[4];
p = "hey";
p = "jey";
Run Code Online (Sandbox Code Playgroud)
但这不是吗?
char* p = new char[4];
p = "hey";
p[0] = 'j';
Run Code Online (Sandbox Code Playgroud)
第二个示例导致分段错误.
在第一个例子中,"jey"是否覆盖"hey"?
字符串文字,例如"hey"或是"jey"常量,您无法修改.
声明
p = "hey";
p = "jey";
Run Code Online (Sandbox Code Playgroud)
使p指向分配的字符串的第一个元素.虽然语言允许,但您丢失了指针信息new,现在您有内存泄漏.
您在第二个示例中遇到了同样的问题,但是当您尝试使用时修改字符串文字时会出现段错误
p[0] = 'j';
Run Code Online (Sandbox Code Playgroud)
Imagine "hey"存储在地址上的一些只读存储器中0x01,0x02以及0x03三个字符和p指向的地址0x01.这样做p[0] = 'j'你正在试图改变存储在地址中的值0x01,但因为它是只读存储器,你得到的段错误.