C++ 在递归中使用引用会导致内存泄漏吗?

C++ 在递归中使用引用会导致内存泄漏吗?,c++,recursion,reference,C++,Recursion,Reference,所以节点“a”保存索引整数1,3(b,d) 节点“b”保存索引整数2(c) 节点“c”包含索引整数0(a) 使用递归,程序跨越图形: (a[0] = b) -> (b[0] = c) -> (c[0] = a) -> (a[1] = d) (我知道这种方法找不到euler路径,但我必须先让它工作) 逻辑本身工作正常,如果我删除引用&那么它只会永远循环a[0]->b[0]->c[0]->a[0]->等等,但是对于引用,它在到达后立即崩溃 find_euler_circuits(

所以节点“a”保存索引整数1,3(b,d)

节点“b”保存索引整数2(c)

节点“c”包含索引整数0(a)

使用递归,程序跨越图形:

(a[0] = b) -> (b[0] = c) -> (c[0] = a) -> (a[1] = d)
(我知道这种方法找不到euler路径,但我必须先让它工作)

逻辑本身工作正常,如果我删除引用&那么它只会永远循环a[0]->b[0]->c[0]->a[0]->等等,但是对于引用,它在到达后立即崩溃

find_euler_circuits(nodes, nodes[a.node_connections[temp]]);
有人能告诉我为什么这会导致上述程序出现分段错误吗? 导致它崩溃的引用在中

int find_remaining_paths(node & a)   //loops forever without &, crashes with &

此外,递归应该在到达一个没有剩余路径的节点时立即停止,但这不是问题所在,因为它在访问一个节点后崩溃。要回答您关于为什么“删除引用”会使它永远循环的问题:没有引用(
&
)在
find_euler_circuits
的原型上,它看起来像
find_euler_circuits(向量节点,节点a)
如果这就是你的意思(*),那么每次你调用时,你都要复制向量和节点,其中包含向量的副本,因此,您设置为-1的值不在您认为的数组中

至于为什么当你有引用时它会崩溃-在
查找剩余路径
中,你将
a.node\u连接[i]
设置为-1,然后返回i,然后在调用者中引用
a.node\u连接[i]
。。。也就是-1。至少,我是这样读代码的


(*)你真的应该提供“删除引用”时得到的代码,不管这意味着什么。

请提供一个。祝你好运-人们很少会关注“我的程序”的链接。最好将您的问题简化为一个问题,无论是在自己调试还是在这里获得帮助方面。我做到了,我的程序实际上要大得多。我把这个问题尽量简化了。。还是我在这里遗漏了什么?我再次将链接名称从“我的程序”更改为“mcve”,人们通常不会关注链接,理想情况下您应该在问题中发布代码。这不仅仅是懒惰,有一个链接会破坏SO的存档性质,因为在某个点上链接会断开,问题/答案将变得毫无价值。@xyz,您正在将
节点的连接向量条目更改为
-1
中的
查找剩余路径。在
节点中尝试索引-1是UB。尝试在调用
find_remaining_path
后添加一条打印语句,该语句打印出
a.node_connections[temp]
。我知道它为什么会永远循环,我唯一的问题是为什么添加引用会导致它崩溃。没有参考,它只制作本地副本,这就是为什么我需要参考它。此外,我还将代码添加到postI think OP中,它引用了
find_remaining_paths
上的ref限定符,该限定符仍然复制
节点
,并且在该函数调用之外没有任何可见效果,即使向量是通过可修改的引用传入的。
find_euler_circuits(nodes, nodes[a.node_connections[temp]]);
int find_remaining_paths(node & a)   //loops forever without &, crashes with &