0

http://d.pr/f/FIjf 请检查 main.c。我分配了一个字符串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 回答