这个简单的指针相等性测试怎么会失败?
Posted
技术标签:
【中文标题】这个简单的指针相等性测试怎么会失败?【英文标题】:How could this simple pointer equality test fail? 【发布时间】:2009-06-26 16:12:59 【问题描述】:void FileManager::CloseFile(File * const file)
for (int i = 0; i < MAX_OPEN_FILES; ++i)
if ((_openFiles[i] == file) == true)
_openFiles[i] == NULL;
...
_openFiles 是 FileManager 的私有成员,只是一个 File * 的数组 当在立即窗口中执行完全相同的测试时,我得到的结果是 1!?!
EDIT == true 纯粹是作为健全性检查添加的!
【问题讨论】:
如果我可以提供一个建议:我认为您确实应该在这里使用更高级的数据结构。某种散列可以防止每次调用该函数时都需要进行搜索,我只能想象在诸如此类的“管理器”类中还有其他此类函数。在许多情况下,管理器类也是一种代码味道...... 该类还处于起步阶段,并且散列在列表中!但是感谢您的建议,因为它证实了我的意见.. 【参考方案1】:你有
_openFiles[i] == NULL;
应该是
_openFiles[i] = NULL;
?
【讨论】:
所以比较没有失败?我认为“立即窗口”意味着您在某种调试器中执行此操作——您没有单步执行该程序吗?另外:编译时使用完整的警告(甚至将警告作为错误)以避免此类错误。 问:我们今天学到了什么? A1:修复的字符越少,越难找到错误。 A2:永远不要在条件句中做作业。【参考方案2】:没有足够的业力来添加评论,但如果 cma 的答案是正确的(条件应该是分配),那么我希望原始帖子没有被修复,或者至少有一个说明它已被修复。我盯着它看了很长时间,试图找到错误,然后放弃并阅读答案。
对于任何可以的人,请随时删除此“答案”。
【讨论】:
是的...我也在想同样的事情。因此,我终其一生都无法弄清楚它出了什么问题。 ://以上是关于这个简单的指针相等性测试怎么会失败?的主要内容,如果未能解决你的问题,请参考以下文章