2013-07-23 69 views
2

我是一名中級程序員,編寫的程序可能對我來說很複雜。程序的目標是構造某些二維數組,並且有幾個不同的類對象以不那麼簡單的方式相互通信。爲了調試,我添加了一行代碼來輸出我在程序中的位置(cout < <「here」;)。該程序現在可以工作,但如果我刪除了cout語句,整個程序的總體結果就會失敗;該程序不遵循預期的程序來創建所述二維陣列。爲什麼從我的函數中刪除'cout'會改變結果?

所以我的問題是:什麼可能發生?或者更確切地說,如何包含一個cout語句「修復」(或對其他周邊代碼有任何影響)?看起來cout語句似乎不會對緩衝區溢出產生影響,但如果是這樣的話,請隨時指教我。

+3

未定義的行爲。 – chris

+7

你知道,這是SSCCE會非常有幫助的時候。考慮到它可能是UB或者微不足道的東西。 – Rapptz

+2

你能提供一些示例代碼,以便我們可以看到問題是什麼? – Longball27

回答

8

您的程序使用定義爲導致「未定義行爲」的構造。更具體地說,程序可能會從執行堆棧中讀取未初始化的內存,或者超出堆棧中存儲的內容的邊界。調用函數(如向cout打印某些內容)會修改堆棧,並且如果存在這些類型的錯誤,可能會導致程序的行爲不同。

+0

「更具體地」之後的所有內容+1。我遇到了同樣的問題,這對於解決似乎是像我這樣的新秀這個瘋狂的錯誤很有幫助。 – OJFord

相關問題