如何在运行时在 Rust 中分配数组?

How do I allocate an array at runtime in Rust?

分配数组后,如何手动释放它?在不安全模式下是否可以进行指针运算?

就像在 C++ 中一样:

double *A=new double[1000];
double *p=A;
int i;
for(i=0; i<1000; i++)
{
     *p=(double)i;
      p++;
}
delete[] A;

Rust 中是否有等效代码?

根据您的问题,如果您还没有阅读 Rust Book,我建议您阅读一下。惯用的 Rust 几乎从不涉及手动释放内存。

至于相当于动态数组,你要a vector。除非你正在做一些不寻常的事情,否则你应该避免在 Rust 中进行指针运算。您可以将上面的代码写成不同的形式:

// Pre-allocate space, then fill it.
let mut a = Vec::with_capacity(1000);
for i in 0..1000 {
    a.push(i as f64);
}

// Allocate and initialise, then overwrite
let mut a = vec![0.0f64; 1000];
for i in 0..1000 {
    a[i] = i as f64;
}

// Construct directly from iterator.
let a: Vec<f64> = (0..1000).map(|n| n as f64).collect();

完全可以在堆上分配固定大小的数组:

let a = Box::new([0.0f64; 1000]);

由于 deref 强制转换,您仍然可以将其用作数组:

for i in 0..1000 {
    a[i] = i as f64;
}

您可以通过以下方式手动释放它:

std::mem::drop(a);

drop 取得数组的所有权,所以这是完全安全的。正如另一个答案中提到的,几乎没有必要这样做,当盒子超出范围时,它会自动释放。