Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么这个程序会出现分段错误_C_Segmentation Fault - Fatal编程技术网

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

C 为什么这个程序会出现分段错误,c,segmentation-fault,C,Segmentation Fault,如果我删除“错误行”,则不存在seg故障。这里有什么问题?您正在修改常量内存。即使您没有const关键字,“1234”的类型是const char*什么指针*d和*p点是只读数据。(文本部分)。试图修改它会导致错误 您可以通过以下方式解决此问题: int main() { char *d = "1234"; char *p = d; p = p+2; p[0] = '2'; \\Error line printf("%s", p); } 或

如果我删除“错误行”,则不存在seg故障。这里有什么问题?

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

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

您可以通过以下方式解决此问题:

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

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

    printf("%s", p);
}


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

因此,当我使用“char d[]=“1234”时,数组d位于数据段中,对吗?C既不指定也不关心这些数据存储的位置。它确实指定不应修改常量数据。
    /* 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);