http://d.pr/f/FIjf
请检查main.c.我将一个字符串指定为char *s3 = "0,9,8,7,6,5,4,3,2,1";
,并且运行时会有一个SIGSEGV。当我取消注释这一行时,就没有SIGSEGV。那么为什么这个字符串赋值会导致SIGSEGV?
答案 0 :(得分:1)
您很可能正在修改字符串文字,从而导致未定义行为(UB)。
s3
指向存储在只读实现定义内存中的字符串文字,任何修改此字符串文字的尝试都会导致未定义行为。事实上,你很幸运,你的代码崩溃了,因为UB并不一定要求崩溃,但它可以给你带来奇怪或字面上的任何结果。