【问题标题】:Debugging seg fault caused by buffer over run调试缓冲区溢出导致的段错误
【发布时间】:2016-07-27 08:05:10
【问题描述】:

我有以下代码:

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");

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

那么,如何调试呢?

段错误仅在启用优化(无调试模式)时发生

【问题讨论】:

  • 你在某处有 UB。祝你好运...
  • 显示MCVE。问题出在您未显示的代码中。
  • @Jacko destIndex 正在变成 >= destLen 和/或 srcIndex 正在变成 >= srcLen 在某个地方,不知何故......(假设 destLensrcLen 实际上对应dest[]src[]中的元素个数)
  • @MartinJames Bingo!!! destIndex 为负数。将您的评论移至答案,以便我给您满分:)
  • 我认为我不应该为此获得满分,但是,好的;)

标签: c debugging if-statement segmentation-fault


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    相关资源
    最近更新 更多