c - 调试缓冲区溢出引起的段错误

标签 c debugging if-statement segmentation-fault

我有以下代码:

if (destIndex < destLen && srcIndex < srcLen)
    dest[destIndex++] = src[srcIndex++];

这段代码运行良好。

如果我删除 if,代码就会崩溃。

如果我运行以下代码

if (destIndex < destLen && srcIndex < srcLen)
    dest[destIndex++] = src[srcIndex++];
else
   fprintf(stderr, "Buffer Overrun\n");

然后我永远不会打印出“缓冲区溢出”

那么,如何调试呢?

段错误仅在打开优化时发生(无 Debug模式)

最佳答案

你在某个地方有UB。 “在调试中有效,但在发布中无效”,或者反过来,是一个巨大的未定义行为标志。

使用调试器检查所有参数:)

关于c - 调试缓冲区溢出引起的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36459275/

相关文章:

debugging - 当你跟踪时,Prolog 中的重做是什么?

Xcode:在调试时,有什么方法可以阻止它在最前面的窗口中打开导航器?

debugging - 如何使用 PDB 文件

exception - Oz 中缺少 else 子句

c - 是否有任何帮助网站可以反转 C 中的逻辑/条件语句?

c - C 中 __m128 的段错误

c - 段错误——无法理解错误的原因

ruby - 有比条件检查更好的方法吗?开关会更有效率吗?

c - 几个字符没有打印

c - 为什么 spoj 对此 "Even Count"的解决方案给出了错误的答案