0

http://d.pr/f/FIjf main.c を確認してください。文字列を as に割り当てたchar *s3 = "0,9,8,7,6,5,4,3,2,1";ところ、実行時に SIGSEGV が発生します。この行の注釈を解除すると、SIGSEGV はありません。では、なぜこの文字列割り当てが SIGSEGV につながるのでしょうか?

4

1 に答える 1

1

ほとんどの場合、文字列リテラルを変更しているため、Undefined Behavior(UB)が発生します。

s3読み取り専用の実装で定義されたメモリに格納された文字列リテラルを指し、この文字列リテラルを変更しようとすると、未定義の動作が発生します。実際、UB は必ずしもクラッシュを義務付けているわけではないため、コードがクラッシュしても幸運です。

于 2013-01-12T15:05:45.440 に答える