为什么修改字符串文字会导致分段错误?
为什么修改预先初始化的字符串文字会导致分段错误? 例如:
char *str = "Hello world"; str[0] = 'h';
当你将str
初始化为该字符串值时,编译器是否自动为该字符串常量分配内存,将其起始位置分配给str
并在程序退出时释放它?
它位于进程地址空间的只读部分,因为字符串文字是常量。 ( str
变量不在只读空间中,但应该使它指向有效的可写位置,然后才能像你一样使用它。)
为什么修改预先初始化的字符串文字会导致分段错误? 例如:
char *str = "Hello world"; str[0] = 'h';
当你将str
初始化为该字符串值时,编译器是否自动为该字符串常量分配内存,将其起始位置分配给str
并在程序退出时释放它?
它位于进程地址空间的只读部分,因为字符串文字是常量。 ( str
变量不在只读空间中,但应该使它指向有效的可写位置,然后才能像你一样使用它。)