2015-04-04 54 views
0

好的,所以,這對我來說有點奇怪。我在我的程序中有這部分代碼,它使用if語句來檢查並查看是否在內存中找到了一個頁面,這兩個都是結構體。不過,我對輸出應該是什麼以及輸出是否完成有所瞭解,因此我開始檢查某些區域,看看它可能來自哪裏,並在這樣做的過程中遇到了這個問題。這裏在這個地方:如果陳述正在執行,儘管條件不符合

if(memory.memory[i].uid==position) 
    { 
     i=pages; 
     found=1; //The page was found in main memory 
     cout << memory.memory[i].uid << " " << position << endl; 
    } 

該cout有用於測試的目的,是我如何發現這個問題。 memory.memory [i] .uid總是等於0,但是if語句中的代碼仍然運行(所以我得到巨大的「0 ##」塊,##因爲位置變量而增加) 。

是否有任何可能的原因會發生?對我來說,儘管聲明是錯誤的,聲明中的代碼仍在執行,這是沒有意義的。語句中的兩個變量都是整數。 (我不確定需要多少代碼,它是一個跨越3個文件的大程序,所以如果我可以避免的話,我不想包含所有的代碼。如果我需要更多的代碼,可以編輯更多。)

編輯:哇,我是盲人。我剛剛意識到我正在修改我之前的聲明,所以它是不一樣的我在聲明中使用。在修正它之後,聲明是在修改i之前的值是匹配的,因爲它們應該是,對於浪費時間抱歉。

回答

1

重新分配到i之間的比較和打印當然可以給表達式memory.memory[i].uid一個不同的值。如果您想查看比較中使用的值,請確保在將重新分配給i之前將其捕獲到

+0

你說得對,我在發佈問題後才注意到它。哈,我應該多加註意。 – 2015-04-04 22:24:42

+0

@JimmyDoyle Heh。這與[橡皮鴨調試](http://en.wikipedia.org/wiki/Rubber_duck_debugging)的原理相同:只是試圖解釋問題可以爲您提供以前錯過的新見解。在這種情況下,在發佈問題後不久,在下次發佈之前,您似乎已經走上了正確的軌道。 :) – hvd 2015-04-04 22:27:55