gdb - 检测到SIGSEGV但无法确定哪个函数和哪个行

时间:2013-01-12 15:04:40

标签: c gdb sigsegv

http://d.pr/f/FIjf   请检查main.c.我将一个字符串指定为char *s3 = "0,9,8,7,6,5,4,3,2,1";,并且运行时会有一个SIGSEGV。当我取消注释这一行时,就没有SIGSEGV。那么为什么这个字符串赋值会导致SIGSEGV?

1 个答案:

答案 0 :(得分:1)

您很可能正在修改字符串文字,从而导致未定义行为(UB)

s3指向存储在只读实现定义内存中的字符串文字,任何修改此字符串文字的尝试都会导致未定义行为。事实上,你很幸运,你的代码崩溃了,因为UB并不一定要求崩溃,但它可以给你带来奇怪或字面上的任何结果。