0

昨天我在我的 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 循环内部调用的?

所以我的问题是,这是缓冲区溢出的最可能原因还是我应该去其他地方看看。我真的不知道还有什么其他问题会导致这个零星且非常烦人的错误。

4

1 回答 1

0

提供的示例中没有无限循环。

第一次迭代前的值为: bob = 0; 流行= 0;

因为 0 (pop) 不小于 0 (bob),所以 pop < bob 返回 false 并且 for 循环不应执行。如果 for 循环正在执行,请检查 bob 的值。也许您已将 bob 的变量初始化放置在不执行的代码路径中。

我个人建议使用调试器。

于 2012-09-19T12:18:33.510 回答