char *p1 = "hello";
char *p2 = (char *)malloc(10 * sizeof(char));
char *p3 = "bye";
strcpy(p2, p1);
printf("p2:%s, %pn", p2, p2);
strcpy(p2, p3);
printf("p2:%s, %pn", p2, p2);
您在不参考任何操作系统或CPU的情况下标记了问题。
数据段和文本段的概念与C无关,它们与一些使这种区别的操作系统有关。
当然,作为文本段,在使用它的系统上,用于代码和读取数据,并且可以修改Malloc返回的内存,因此不能是文本段。
数据段可以参考初始化数据,当然可以分配新数据,因此不可能是数据段的含义。
如果您对数据段的定义是任何数据,则返回的内存是其中的一部分。有一些(不常见/旧的(架构,带有单独的代码和数据地址空间。
C标准仅承诺可修改Malloc内存并正确对齐。