为什么我的C ++指针突然发散?

时间:2013-08-11 21:49:05

标签: c++ pointers

我正在用C ++创建一个小的AVL树类,我在这里得到了一些指针,它的表现相当奇怪。

在课堂上,我有一个名为“root”的变量,它是一个指向节点的指针。有一次,我将这个对象的指针传递给以下函数:

template <class T> void AVL<T>::RRotate(Node ** node) {
    std::cout << this->root << std::endl << *node << std::endl;
    *node = (*node)->left;      
    std::cout << this->root << std::endl << *node;
}

(注意'left'是一个包含指向节点的指针的字段。)

现在,第一次打印始终打印出相同的内存位置。

但是,第二个调用将为this-&gt; root和* node打印一个不同的目录。

这是为什么?当我设置“* node =(* node) - &gt; left;”时,不应该更改this-&gt; root,因为node只是指向该指针的指针吗?

我有点困惑。

感谢任何帮助!

编辑:示例输出如下:

  

0x902a88

     

0x902a88

     

0x902a88

     

0x902aa8

编辑2:打印输出&amp; this-&gt; root和节点会显示它们始终是相同的值,因此看起来指针指向正确的位置。

1 个答案:

答案 0 :(得分:2)

如果您希望RRotate(&root)成为指向node的指针,则应致电this->root

或者,更详细:

node = &(this->root);
this->RRotate(node);

最有可能的是,您的代码node中没有指向root字段。尝试打印node&root