1

为什么修改预初始化的字符串文字会导致分段错误?例如:

char *str = "Hello world";
str[0] = 'h'; 

当您初始化str该字符串值时,编译器是否不会自动为该字符串常量分配内存,将其起始位置分配给str并在程序退出时释放它?

4

1 回答 1

2

它位于进程地址空间的只读部分中,因为字符串文字是一个常量。(该str变量不在只读空间中,但应使其指向一个有效的可写位置,然后才能按您的方式使用它。)

于 2013-10-25T22:48:07.780 回答