检测windows上free()后的使用情况。 (悬挂指针)

时间:2010-03-12 21:27:58

标签: c++ c security testing

我正在尝试检测“使用后免费()”错误,否则称为“悬空指针”。我知道Valgrind可以用来检测* nix平台上的“免费使用”错误,但是windows呢?如果我没有来源怎么办?是否有比Valgrind更好的程序来检测程序中的所有悬空指针?一个免费的开源将是首选,但我将使用商业解决方案,如果它将完成工作。

9 个答案:

答案 0 :(得分:5)

MSVC调试内存分配器已经这样做了。当你从指针取消引用得到0xfeeefeee时,你已经悬空了。运气会让计划轰炸。

答案 1 :(得分:5)

您可以使用gflags.exeDebugging 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并等待烟火?