我们已经知道免费使用后漏洞可能会导致安全问题。由于免费使用后的错误是由悬空指针产生的,我的问题是如果悬挂指针没有在程序中使用,它们被认为是安全的还是良性的(不是那么危险)?
答案 0 :(得分:6)
未使用的悬空指针并不危险......直到下一个开发人员使用它。
您将问题标记为C和C ++;我会认为你使用的是C ++,而不是C.
对于C ++,避免使用具有模糊语义和悬空倾向的原始指针。使用unique_ptr
和shared_ptr
可以为您提供很多帮助。
无论如何,避免悬挂指针。将删除的指针设置为nullptr
几乎没有任何成本,它可以节省大量的开发/调试时间。
如果你遇到悬挂指针的问题,或者至少是与它们相关的问题,你可能有机会应用漂亮的rule of zero
:你的班级管理记忆(你正在写一个容器,一个特定的酷炫指针包装等等,或者你正在编写一个不应该拥有任何原始指针的非管理类。
答案 1 :(得分:3)
虽然您在安全性和漏洞方面构建了问题,但我认为避免避免悬挂指针的更有说服力的理由是帮助程序尽早失败。
设置指向NULL
或nullptr
的指针,当他们的反驳被删除时,会产生一个容易识别的错误情况,一旦程序试图顺从,就会可能导致失败指针。允许指针持续指向释放的内存可能会导致以后难以调试的情况。
在C ++中,unique_ptr
,shared_ptr
等可以帮助您避免因悬空指针引起的问题。
在C和C ++中,address sanitization可以帮助您找到内存滥用,例如不恰当的引用指针。在clang,gcc,clang ++和g ++中,您可以通过在编译选项中添加-fsanitize=address
标志来使用此工具(请注意,它在多线程中效果不佳)。