C 调试缓冲区过度运行导致的seg故障

C 调试缓冲区过度运行导致的seg故障,c,debugging,if-statement,segmentation-fault,C,Debugging,If Statement,Segmentation Fault,我有以下代码: if (destIndex < destLen && srcIndex < srcLen) dest[destIndex++] = src[srcIndex++]; if(destIndex

我有以下代码:

if (destIndex < destLen && srcIndex < srcLen)
    dest[destIndex++] = src[srcIndex++];
if(destIndex
这段代码运行良好

如果我删除了If,那么代码就会崩溃

如果我运行下面的代码

if (destIndex < destLen && srcIndex < srcLen)
    dest[destIndex++] = src[srcIndex++];
else
   fprintf(stderr, "Buffer Overrun\n");
if(destIndex
然后我再也没有打印出“缓冲区溢出”

那么,如何调试它呢


seg故障仅在优化打开(无调试模式)时发生。

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


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

您在某个地方找到了UB。祝你好运…展现你的魅力。问题出在您没有显示的代码中的某个地方。@Jacko
destIndex
正在命令>=
destLen
和/或
srcdex
正在命令>=
srcLen
不知何故。。。(假设
destLen
srcLen
实际上对应于
dest[]
src[]
中的元素数)@MartinJames Bingo!!!destIndex正在变为负值。把你的评论移到一个答案上,这样我就可以给你满分:)我认为我不应该因此得到满分,但是,好吧;)