如果指针指向无效内存,Visual Studio将触发断点

时间:2015-06-05 07:32:45

标签: c++ visual-c++

我正在使用visual studio IDE,如果同一行指针指向无效内存(已经删除的内存),我需要在特定位置中断我的程序。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

如果您控制指向的类型,是。

添加字段int already_destroyed并在构造函数中将其设置为0,并在析构函数中将其设置为非零值。即使调试CRT覆盖它,它仍然是非零的。在Visual Studio中,使用条件为already_destroyed != 0的条件断点。

理论上不可移植,但我怀疑这个想法可以在更多环境中使用。

答案 1 :(得分:0)

this Stack Overflow article所述,您无法确定指针在C ++代码中是否有效。这样做的主要原因是维护每个指针的状态会有很多开销。 Visual Studio调试器使用C ++代码来实现其功能,因此在那里也是如此。话虽这么说,你可以监视每个指针指向的内存,方法是在监视列表中键入指针名称,或者在Memory窗口(Debug -> Windows -> Memory)中输入它。但请注意,指针本身不一定会告诉它指向的内存是有效还是无效。

答案 2 :(得分:0)

如果你需要一种"验尸"解决方案,总是有可能使用PageHeap。这样,如果您的程序试图访问免费内存或其他无效内存,CRT将导致__debugbreak。但请注意,此解决方案会耗费您的内存消耗,所以不要忘记之后禁用它!

您需要的所有信息: PageHeap @ MSDN