Итак, у меня есть следующая программа:
int main(){
char* one = "computer";
char two[] = "another";
two[1]='b';
one[1]='b';
return 0;
}
Это segfaults на строке "one [1] = 'b", что имеет смысл, потому что память, на которую указывает указатель "один", должна быть в памяти только для чтения. Однако вопрос заключается в том, почему строка "two [1] = 'b'" segfault? Глядя на сборку из gcc:
.file "one.c"
.section .rodata
.LC0:
.string "computer"
.LC1:
.string "another"
.text
.globl main
.type main, @function
main:
Мы видим, что обе строки находятся в разделе родата, поэтому они являются readonly. Итак, как получилось, что строка "two [1] =" b "не является segfault?