为什么这个程序会出现分段错误

时间:2018-03-08 04:00:26

标签: c segmentation-fault

int main() 
{
    char *d = "1234";

    char *p = d;
    p = p+2;
    p[0] = '2';    \\Error line

    printf("%s", p);
}

如果我删除“错误行”行,则没有seg错误。问题是什么?

2 个答案:

答案 0 :(得分:1)

您正在修改常量内存。即使您没有const关键字,"1234"的类型也是const char *

答案 1 :(得分:0)

什么指针* d和* p指向只读数据。 (文本段)。试图修改它会导致错误。

你可以通过以下方式修复它:

    /* Using character arrary, initialized it with "1234" */

    char d[] = "1234"; 

    /* Malloc heap memory for"1234" */

    char *d = (char *)malloc(4); 
    strcpy(d, "1234");
    // ...
    free(d);

您还应为终端字符“\ 0”添加一个额外空格。