诡异的bug

今后要注意一些数组或单个变量的初始化。
遇到一个极其诡异的bug,输出结果错误,先是debug检查代码逻辑,没有发现问题,在手动用cout来打印某些断点信息时突然发现输出结果正确了。于是检查cout没有发现有影响程序结果的地方,都是一些cout<<“***”; cout<<" “;输出语句,没有用到任何变量。就是单纯地输出随便打的一些字符,发现结果突然正确。百思不得其解,继续测试,cout<<”“;输出空字符串发现结果错误,而cout<<” “;后结果正确,这就有意思起来,怀疑是输出流缓冲区之类的问题。
继续验证,将cout<<” ";置于逻辑函数前,正确,置于逻辑函数后,正确,置于逻辑函数内的第一行,错误(可以确保逻辑函数肯定执行并且执行了cout语句)。测试结果说明这一点不是程序逻辑问题,肯定是一些关于C++语句底层的东西导致的,逐步排查发现是一个bool型数组的初始化有问题,当没有cout函数时初始化在某一次调用时产生了意料之外的结果(类似于int a=1,但是a赋值为5且没有发生错误,更诡异的是其他次调用都成功),但是cout之后每次调用都成功(???)。
无奈,只能将 bool visit[m][n] = {0}; 更改为 bool visit[m][n]; memset(visit,0,sizeof(visit)); 随后BUG消失。虽然找到了问题所在,但是为什么发生问题及为什么这样初始化就解决了问题仍然没有答案。后面重新单独测试bool visit[m][n] = {0}; 的初始化效果发现确实将整个数组元素初始化为0,所以对于这个BUG的产生和消失仍不明白原理。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值