我正在尝试检测“使用后免费()”错误,否则称为“悬空指针”。我知道Valgrind可以用来检测* nix平台上的“免费使用”错误,但是windows呢?如果我没有来源怎么办?是否有比Valgrind更好的程序来检测程序中的所有悬空指针?一个免费的开源将是首选,但我将使用商业解决方案,如果它将完成工作。
答案 0 :(得分:5)
MSVC调试内存分配器已经这样做了。当你从指针取消引用得到0xfeeefeee时,你已经悬空了。运气会让计划轰炸。
答案 1 :(得分:5)
您可以使用gflags.exe
和Debugging Tools for Windows在流程中启用堆检查:
自从我使用它以来已经有一段时间了,老实说我记不清它与C运行时堆的交互程度,而不是Windows堆管理器(确保每个malloc()
/ {{ 1}} / free()
/ new
来电分开检查。)
免费,但不是开源。
答案 2 :(得分:3)
它不如Valgrind好,但微软的Application Verifier对Windows执行类似的功能。它还可以让你模拟大多数API的错误条件,告诉你是否会在你最重要的客户面前爆炸:)
答案 3 :(得分:2)
多年前我为此目的使用了Purify。它已经存在了很长时间,并且在我使用它时非常好。
答案 4 :(得分:1)
请参阅CheckPointer,我们的Memory Safety Checker for C。是否要求您拥有源代码,但确实在Wndows上运行。
答案 5 :(得分:0)
NuMega BoundsChecker用来捕捉这些东西。不确定他们是否还在经营......
答案 6 :(得分:0)
DieHard是值得关注的另一种选择。它位于HOARDE网站上,遗憾的是它似乎使用了框架,所以你需要在左侧导航中找到DieHard。
答案 7 :(得分:0)
检查the Windows debug heap。它不是开源的,但有效。
答案 8 :(得分:0)
在free()之后,将指针值设置为0并等待烟火?