昨天我遇到了一个我无法做出头脑或尾巴的错误。经过几个小时的软件工作,它突然崩溃并向我展示了以下类型的消息(可能不一样,因为我只能重现一次并且没有保存消息 - 但这是一个BEX错误,使用另一个代码片段,请参见下文):
Problemsignatur:
Problemereignisname: BEX
Anwendungsname: ----.exe
Anwendungsversion: 0.0.0.0
Anwendungszeitstempel: 5059a92f
Fehlermodulname: ----.exe
Fehlermodulversion: 0.0.0.0
Fehlermodulzeitstempel: 5059a92f
Ausnahmeoffset: 0000cae3
Ausnahmecode: c0000417
Ausnahmedaten: 00000000
Betriebsystemversion: 6.0.6000.2.0.0.---.-
Gebietsschema-ID: 1031
Zusatzinformation 1: d752
Zusatzinformation 2: becd3a3c3e2751afee56698a1f79a48e
Zusatzinformation 3: 4c74
Zusatzinformation 4: 91af6395315cadbb5a06842f28b0d430
所以当我发现这是一个缓冲区溢出错误时,我试图弄清楚缓冲区溢出会发生在哪里。我想出了一个不应该工作的for循环并导致这样的错误。问题的类型是这样的:
int bob=0;int pop;
for(pop=0;pop<bob;pop++){cout<<pop;}
除了用cout代替cout外,pop值用于用元素填充数组。我在这里用零启动它只是为了演示,在程序中bob可以被用户改为值> 0但是无论bob是零还是!= 0都连续调用for循环。当我执行上面的代码时,proggy立即崩溃(正如预期的那样),而在实际情况下它没有,只是在很长一段时间之后,即使我使用cout命令检查for循环是否确实执行了。也许这是因为代码在函数内部并且该函数是从while循环中调用的?
所以我的问题是,这是缓冲区溢出的最可能原因还是我应该看看其他地方。我真的不知道其他什么问题可能导致这个零星的,非常恼人的错误。
答案 0 :(得分:0)
提供的示例中没有无限循环。
第一次迭代之前的值是: bob = 0; pop = 0;
因为0(pop)不小于0(bob),所以pop&lt; bob返回false,for循环不应该执行。如果正在执行for循环,请检查bob的值。也许您已将bob的变量初始化放在不执行的代码路径中。
我个人建议使用调试器。