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正在变为负值。把你的评论移到一个答案上,这样我就可以给你满分:)我认为我不应该因此得到满分,但是,好吧;)