2

得られたエラー:

$ 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;
}

なぜこのメモリリークが発生するのですか?

4

2 に答える 2

3

メモリ リークが見られるときはいつでも、それは Rust のバグです (ネイティブ コードをいじっていない限り... その場合、リーク検出器はおそらくそれを見つけられないでしょう)。この場合、問題番号 1896 です。

于 2012-07-11T21:15:51.660 に答える
0

上記のコードの主なバグは、レコードが関数の制約を解除できないことです。タイプを fn から fn@ に切り替えると、上記のスニペットが機能します。

于 2012-07-15T08:33:12.783 に答える