昨天我在我的 proggy 中遇到了一个我无法确定的错误。在使用该软件数小时后,它突然崩溃并向我显示以下类型的消息(可能不一样,因为我只能重现一次并且没有保存该消息 - 但这是一个 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;}
除了使用 pop 值代替 cout 来用元素填充数组。我在这里用零初始化它只是为了演示,在程序中,用户可以将 bob 更改为 >0 的值,但是无论 bob 是零还是 !=0,都会连续调用 for 循环。当我执行上面的代码时,proggy 立即崩溃(如预期的那样),而在实际情况下它没有,只是在很长一段时间后,即使我使用 cout 命令检查 for 循环是否确实执行。也许这是因为代码在函数内部,并且该函数是从 while 循环内部调用的?
所以我的问题是,这是缓冲区溢出的最可能原因还是我应该去其他地方看看。我真的不知道还有什么其他问题会导致这个零星且非常烦人的错误。