为什么这会导致细分错误?

时间:2020-03-01 07:57:00

标签: c++

int main()
{
    char *p = "I like C++";
    strcpy(p, "John Smith");
    std::cout << p << std::endl;
    EXIT_SUCCESS;
}

正如标题所述,为什么会导致分割错误

1 个答案:

答案 0 :(得分:2)

strcpy() documentation使用的术语来说,您正在尝试将“ John Smith”(source参数)复制到p({{1} }参数。

尽管destination是类型p的指针,但它位于只读数据部分(可能是char *)。

尝试将新字符串复制到其中,意味着尝试覆盖只读内存。

将声明更改为.rodata可以解决此问题,因为char p[] = "I like C++";现在驻留在stach中,该stach是可读写的内存。

顺便说一句,最后一行缺少p,应为return