【问题标题】:gdb - SIGSEGV detected but cannot determine which function and which linegdb - 检测到 SIGSEGV 但无法确定哪个函数和哪一行
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多