2012-09-19 39 views
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;} 

不同之處在於代替COUT彈出值被用來填充元素的數組。爲了演示,我在這裏初始化了它,在程序中,bob可以由用戶更改爲大於0的值,但不管bob是零還是!= 0,都會連續調用for循環。當我執行上面的代碼時,proggy會立即崩潰(如預期的那樣),而在實際情況下,它只有在很長時間後纔會崩潰,即使我使用cout命令來檢查for循環是否確實被執行。也許這是因爲代碼在一個函數內部,並且該函數是在while循環內部調用的?

所以我的問題是,這是緩衝區溢出的最可能的原因,或者我應該看看別的地方。我真的不知道其他問題會導致這種零星而非常令人討厭的錯誤。

回答

0

在提供的示例中沒有無限循環。

第一次迭代之前的值爲: bob = 0; pop = 0;

因爲0(彈出)不小於0(bob),彈出< bob返回false,for循環不應執行。如果for循環正在執行,請檢查bob的值。也許你已經將bob的變量初始化置於一個不能執行的代碼路徑中。

我個人會推薦使用調試器。

+0

正如我所說我已經檢查過for循環是否確實通過在for循環中寫入一個cout命令來執行:cout << bob它向我展示了一個0.但是這隻適用於我的proggy而不是上面的例子。我不知道爲什麼。 – user1331044

+0

顯然這個問題不在你在這裏發佈的代碼中。不知道你的代碼是做什麼的,它是如何做的,不可能說出錯是什麼。 是否有一個你不能使用調試器的原因? –

+0

與此同時我能夠重現錯誤信息,我想我現在已經修復了它。錯誤信息btw與上面顯示的執行上面的代碼片斷相同。所以從這樣的消息中確實很難說出實際上出了什麼問題。儘管如此,我仍然不知道爲什麼for循環會執行一次,而另一次則不是。也許是因爲它在一個函數內,它又是在while循環中調用的。我只是把它放在一個if排除(如果(bob> 0)),所以它不能再成爲可能的緩衝區溢出的原因。 – user1331044