c ++中的空闲内存(犰狳)

时间:2015-05-30 20:27:24

标签: c++ free armadillo

我想在c ++中使用一个对象('ii',在下面的程序中)后释放内存:

#include <iostream>
#include <armadillo>

using namespace std;
using namespace arma;

int main()
{
    cx_mat ii(2,2,fill::eye);
    cout << ii <<endl;
    free (ii);
    return 0;
}

但是在编译之后,我遇到了以下错误:

error: cannot convert ‘arma::cx_mat {aka arma::Mat<std::complex<double> >}’ to ‘void*’ for argument ‘1’ to ‘void free(void*)’

任何人都能引导我吗?

3 个答案:

答案 0 :(得分:2)

cx_mat ii(2,2,fill::eye);

这是在堆栈上分配的,你不能释放它,它会在程序退出范围时被销毁。

http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html

答案 1 :(得分:1)

您只能 free指针,其中包含malloccallocrealloc返回的地址。没有其他的。特别是没有矩阵。

您也不需要在C ++中使用free

在你的情况下,你不需要做任何事情来释放内存,矩阵的析构函数会处理它。

答案 2 :(得分:1)

您收到错误的原因是因为您没有传递指向该函数的指针。

但是,free requires传递了malloccallocrealloc返回的指针,否则会发生未定义的行为。

当您的函数返回或退出时,将释放对象的内存。