匿名函数泄漏内存

时间:2012-07-11 21:13:23

标签: memory-leaks anonymous-function rust

获得的错误:

$ rustc leakyFunction.rs --test
$ ./leakyFunction 

running 1 test
test testForLeakage ... Unreclaimed object found at 0xb6d02d98: ((), (10))
leaked memory in rust main loop (1 objects)
leakyFunction: /home/havvy/rust/src/rt/memory_region.cpp:172:
    memory_region::~memory_region(): Assertion `false' failed.
Aborted (core dumped)

锈蚀代码(减少的测试用例):

use std;

type boxedFn = { theFn: fn () -> uint };

fn createClosure (closedUint: uint) -> boxedFn {
    { theFn: fn@ () -> uint { closedUint } }
}

#[test]
fn testForLeakage () {
    let aFn: boxedFn = createClosure(10);

    let myInt: uint = aFn.theFn();

    assert myInt == 10;
}

为什么这会泄漏记忆?

2 个答案:

答案 0 :(得分:3)

任何时候你看到内存泄漏,这是Rust中的一个错误(除非你正在使用本机代码......在这种情况下,我们的泄漏检测器可能找不到它)。在这种情况下,问题是#1896。

答案 1 :(得分:0)

上述代码中的主要错误是记录不能无约束的功能。通过将类型从fn切换到fn @,上面的代码段可以正常工作。