首页 > 其他 > 详细

关于指针的引用的问题

时间:2020-01-18 11:47:30      阅读:51      评论:0      收藏:0      [点我收藏+]

我遇见了一个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。

关于指针的引用的问题

原文:https://www.cnblogs.com/yxsrt/p/12208618.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!