LINUX.ORG.RU

История изменений

Исправление provaton, (текущая версия) :

грубо говоря после malloc не написали free

От этого раст (частично) предохраняет, когда переменная выходит из своей области видимости память с ней связанная освобождается. Такой вот код не течет:

fn foo() {
   loop {
      let a = vec![1,2,3];
      println!("a is {:?}", a);
      // a освобождается здесь
   }
}

Но вот такой уже потечет даже без ворнинга от компилятора:

fn foo() {
   let vector_of_vectors = Vec::new();
   loop {
      vector_of_vectors.push(vec![1,2,3]);
      println!("vector of vectors is {:?}", vector_of_vectors);
   }
}

Исправление provaton, :

грубо говоря после malloc не написали free

От этого раст (частично) предохраняет, когда переменная выходит из своей области видимости память с ней связанная освобождается. Такой вот код не течет:

fn foo() {
   loop {
      let a = vec![1,2,3];
      println!("a is {:?}", a);
      // a освобождается здесь
   }
}

Но вот такой уже потечет даже без ворнинга от компилятора:

fn foo() {
   let vectors_of_vectors = Vec::new();
   loop {
      vectors_of_vectors.push(vec![1,2,3]);
      println!("vector of vectors is {:?}", vector_of_vectors);
   }
}

Исходная версия provaton, :

грубо говоря после malloc не написали free

От этого раст (частично) предохраняет, когда переменная выходит из своей области видимости память с ней связанная освобождается. Такой вот код не течет:

[code] fn foo() { loop { let a = vec1,2,3; println!(«a is {:?}», a); // a освобождается здесь } } [/code]

Но вот такой уже потечет даже без ворнинга от компилятора:

[code] fn foo() { let vectors_of_vectors = Vec::new(); loop { vectors_of_vectors.push(vec1,2,3); println!(«vector of vectors is {:?}», vector_of_vectors); } } [/code]