2015-04-04 52 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