【发布时间】:2013-01-12 15:04:39
【问题描述】:
http://d.pr/f/FIjf
请检查 main.c。我分配了一个字符串为char *s3 = "0,9,8,7,6,5,4,3,2,1";,运行时会有一个SIGSEGV。当我取消注释这一行时,就没有 SIGSEGV。那么为什么这个字符串赋值会导致 SIGSEGV 呢?
【问题讨论】:
标签: c gdb segmentation-fault
http://d.pr/f/FIjf
请检查 main.c。我分配了一个字符串为char *s3 = "0,9,8,7,6,5,4,3,2,1";,运行时会有一个SIGSEGV。当我取消注释这一行时,就没有 SIGSEGV。那么为什么这个字符串赋值会导致 SIGSEGV 呢?
【问题讨论】:
标签: c gdb segmentation-fault
您很可能正在修改导致未定义行为(UB)的字符串文字。
s3 指向存储在只读实现定义内存中的字符串文字,任何修改此字符串文字的尝试都会导致未定义的行为。事实上,您的代码崩溃是幸运的,因为 UB 不一定要求崩溃,但它可以给您带来奇怪或几乎任何结果。
【讨论】: