我是一名从事C ++大型项目的软件实习生,&我也是一个单人团队。令人生畏(这就是你如何拼写它:P),是的,但也很有趣。
我遇到的c ++指针最终指向NULL(不是因为内存被释放/删除,但是因为,我真的不知道,但我怀疑它因为我指向的对象被更新,因此最初分配指针未指向正确的内存地址。
正如您所看到的,我感到很困惑,这就是为什么我想知道技术或免费程序,它们可以帮助我确定WHEN&何时指针指向null或超出范围(悬挂指针?是发生了什么)。
也许我可以使用简单的ASSERT调用来确定指针何时为空?
更多信息:现在我的问题是我有一个具有成员变量指针的类。它们在构造函数&中初始化。在构造函数的末尾,那些指针指向正确的对象。但是在对事件的反应中,当我看到这些指针时,它们是空的/超出范围。我可以确定这个因为1.程序崩溃& 2 eclipse调试器将它们显示为红色空心圆(我认为这意味着指向NULL或超出范围?)。
答案 0 :(得分:5)
我建议使用两种不同的工具:
答案 1 :(得分:1)
如果被指向的对象是自定义类,则可以在析构函数中放置一个断点,以查看它是否/何时被销毁。如果没有,您可以为该类的析构函数设置符号断点。
答案 2 :(得分:1)
您需要一个数据断点。 Visual Studio肯定有它们。 GDB肯定有它们 - 它可能称之为别的东西(观察点?)。我没有使用Eclipse,但也可能会这样做。
因此,您在构造函数中设置(常规)断点,以便正确设置指针。然后选择其中一个指针,并在其上放置一个数据断点。然后跑。当某些东西改变指针的值时,程序将停止。那会告诉你问题所在。
答案 3 :(得分:0)
使数据(指针)保密,并通过断言强制使用特定用法。例如:
class t_class {
public:
/* ... */
void invalidatePointer() {
/* is a delete required??? */
this->d_pointer = 0;
}
void setPointer(int* const p) {
assert(p && "use invalidatePoiner");
/* ...stuff... */
this->d_pointer = p;
}
private:
int* d_pointer; /* you probably don't want a non-contained pointer here, either */
};