1

事前に初期化された文字列リテラルを変更するとセグメンテーション違反が発生するのはなぜですか? 例えば:

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

その文字列値に初期化strすると、コンパイラは自動的にその文字列定数にメモリを割り当て、開始位置を割り当て、strプログラムの終了時に解放しませんか?

4

1 に答える 1

2

文字列リテラルは定数であるため、プロセスのアドレス空間の読み取り専用セクションにあります。(str変数は読み取り専用スペースではありませんが、このように使用する前に、有効な書き込み可能な場所を指すようにする必要があります。)

于 2013-10-25T22:48:07.780 に答える