だから私は次のプログラムを持っています:
int main(){
char* one = "computer";
char two[] = "another";
two[1]='b';
one[1]='b';
return 0;
}
「one[1]='b'」の行でセグフォールトします。これは、ポインタ「one」が指すメモリが読み取り専用メモリにある必要があるため、意味があります。ただし、問題は、「two [1]='b'」という行がセグメンテーション違反ではないのはなぜかということです。gccからのアセンブリ出力を見てください。
.file "one.c"
.section .rodata
.LC0:
.string "computer"
.LC1:
.string "another"
.text
.globl main
.type main, @function
main:
両方の文字列がrodataセクションにあるため、読み取り専用であることがわかります。では、どうして「two [1]='b'」という行がセグメンテーション違反にならないのでしょうか。