• 关于指针的引用的问题


    我遇见了一个bug是这样的:一个node结点包含node * left和node * right两个指针域。

    void fun(node * &a, node * b) {
        b->right = a->right;
        b->left = a;
        a->right->left = b;
        a->right = b;
    }

    当我以fun(x->left, y)调用这个函数时,会发现指针不能指向正确的位置。

    几经排查后,我发现是指针的引用的问题。因为我调用fun的时候,第一个参数给的是x->left,所以引用实际上绑定到了x所指向的那片空间的left域。

    接着问题就来了,函数fun()的第三行,a->right->left实际上就是x->left的这片区域,因此将其设置为b的时候,就相当于把a设置为了b。因此无法通过a访问x->left了,因为x->left已经等于b了。

    解决这个问题可以用加一句node * c = a;将引用去掉,这样即使a被改变了,c还是指向了x->left。

  • 相关阅读:
    基于php socket(fsockopen)的应用实例分析
    php多线程的问题
    PHP之fsockopen提交POST数据讲解
    Sort List
    Insertion Sort List
    LRU Cache
    Reorder List
    Word Break II
    Word Break
    Copy List with Random Pointer
  • 原文地址:https://www.cnblogs.com/yxsrt/p/12208618.html
Copyright © 2020-2023  润新知