char *p1 = "hello";
char *p2 = (char *)malloc(10 * sizeof(char));
char *p3 = "bye";
strcpy(p2, p1);
printf("p2:%s, %p\n", p2, p2);
strcpy(p2, p3);
printf("p2:%s, %p\n", p2, p2);
答案 0 :(得分:3)
您在不使用任何操作系统或CPU的情况下用C标记了问题。
数据段和文本段的概念与C无关,它们与某些实现这种区分的操作系统有关。
当然,由于文本段在使用它的系统上用于代码和只读数据,并且可以修改malloc返回的内存,因此它不能是文本段。
数据段可以引用初始化的数据,malloc当然会分配新数据,因此它不是数据段的含义。
如果您对数据段的定义是任何数据,那么返回的内存就是其中的一部分。有一些(不常见/旧的)体系结构具有单独的代码和数据地址空间。
C标准仅保证malloc内存是可修改的并且已正确对齐。