Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks 只有间接泄漏,没有直接泄漏_Memory Leaks_Valgrind_Memory Leak Detector_Leak Sanitizer - Fatal编程技术网

Memory leaks 只有间接泄漏,没有直接泄漏

Memory leaks 只有间接泄漏,没有直接泄漏,memory-leaks,valgrind,memory-leak-detector,leak-sanitizer,Memory Leaks,Valgrind,Memory Leak Detector,Leak Sanitizer,在阅读完这个StackOverflow问题后:我的印象是,如果我修复了所有直接泄漏(多个修复测试通过,因为在修复之前的直接泄漏后,间接泄漏可能会变成直接泄漏),最终我将得到0个泄漏 我目前正在使用泄漏消毒剂(LSAN),在修复了所有直接泄漏(一些间接泄漏因此消失)之后,我现在剩下一堆间接泄漏。为什么没有直接的?什么时候会发生这种情况?如何诊断和修复其余泄漏?它们可能是循环参考。由于间接泄漏可以从其他泄漏的块访问,因此具有循环依赖性,例如,2个对象相互引用,并且这两个对象可能无法从根访问 例如,在

在阅读完这个StackOverflow问题后:我的印象是,如果我修复了所有直接泄漏(多个修复测试通过,因为在修复之前的直接泄漏后,间接泄漏可能会变成直接泄漏),最终我将得到0个泄漏


我目前正在使用泄漏消毒剂(LSAN),在修复了所有直接泄漏(一些间接泄漏因此消失)之后,我现在剩下一堆间接泄漏。为什么没有直接的?什么时候会发生这种情况?如何诊断和修复其余泄漏?

它们可能是循环参考。由于间接泄漏可以从其他泄漏的块访问,因此具有循环依赖性,例如,2个对象相互引用,并且这两个对象可能无法从根访问

例如,在模式中,如果在使用结束时忘记注销,则很容易保持循环引用()

一般来说,最好避免循环引用。若从所有权的角度考虑,所有者必须有对其拥有的对象的引用,但反之亦然,在这种情况下循环依赖是不可能的。如果不允许通过setter分配依赖项,那么这是可以实现的。另外,例如,
Rust
借用引用会使循环依赖变得不可能