这个简单的指针相等性测试怎么会失败?

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 的答案是正确的(条件应该是分配),那么我希望原始帖子没有被修复,或者至少有一个说明它已被修复。我盯着它看了很长时间,试图找到错误,然后放弃并阅读答案。

对于任何可以的人,请随时删除此“答案”。

【讨论】:

是的...我也在想同样的事情。因此,我终其一生都无法弄清楚它出了什么问题。 ://

以上是关于这个简单的指针相等性测试怎么会失败?的主要内容,如果未能解决你的问题,请参考以下文章

chai 测试数组相等性没有按预期工作

如何使用 xcttest 测试对象相等性?

C ++中派生类的相等性测试[重复]

*通过共享* JavaScript 对象测试深度相等性

在 Realm 中测试相等性

在Java中测试两个JSON对象的相等性忽略子顺序[关闭]