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