昨天测试分类代码,原本准确率很高的代码,结果测试的时候却发现没几个分类准确的。
断点调试,遇到一个很诡异的问题,调用函数的时候,在函数体内部加断点与不加断点的分类结果不同。反复确认之后,发现确实存在这种问题。
以为是输入参数的问题,我使用的值传递,也许是这里不小心出现了问题,于是各种修改代码,尝试各种函数返回方式,结果是越来越槽。大半个下午的时间都耗在上面,仍是没有解决问题。
今天早上,重新检查,还是这样的问题。尝试不使用函数调用,将代码段直接放在调用处。发现不管输入数据怎样,分类结果全部一样,并且投票的分布也完全没变化。
终于意识到问题应该是出现在代码里面的计算上,开始全面一步步检查代码。
在生成过程中,有一条提示:有一个变量没有初始化。在昨天的调试中我也看到了,但只是简单了检查了一下第一次使用的地方,是初始化过的,所以就没再管那个warning。现在重审,发现那条提示的变量是另一个地方。
问题终于发现了,是因为我在变量的使用中间,重新 int a了。于是a就成了一个没有初始化的变量,所以出现了“每次运行得到不同的结果”。
总结:
调试中遇到的warning提示一定要仔细查看,不然可能会引起很严重的后果。