2012-07-11 6 views
2

L'erreur obtenue:Anonyme Fonction fuites de mémoire

$ 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) 

Le code de la rouille (réduite testcase):

use std; 

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

fn createClosure (closedUint: uint) -> boxedFn { 
    { theFn: [email protected]() -> uint { closedUint } } 
} 

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

    let myInt: uint = aFn.theFn(); 

    assert myInt == 10; 
} 

Pourquoi est-ce une fuite de mémoire?

Répondre

3

Chaque fois que vous voyez une fuite de mémoire, c'est un bug dans Rust (à moins que vous ne vous baladiez avec du code natif ... et dans ce cas, nos détecteurs de fuites ne le trouveraient probablement pas). Dans ce cas, c'est le numéro 1896.

0

Le principal bogue dans le code ci-dessus est que les enregistrements ne peuvent pas des fonctions non contraintes. En basculant le type de fn à fn @, l'extrait ci-dessus fonctionne.