我想在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*)’
任何人都能引导我吗?
答案 0 :(得分:2)
cx_mat ii(2,2,fill::eye);
这是在堆栈上分配的,你不能释放它,它会在程序退出范围时被销毁。
答案 1 :(得分:1)
您只能 free
指针,其中包含malloc
,calloc
或realloc
返回的地址。没有其他的。特别是没有矩阵。
您也不需要在C ++中使用free
。
在你的情况下,你不需要做任何事情来释放内存,矩阵的析构函数会处理它。
答案 2 :(得分:1)
您收到错误的原因是因为您没有传递指向该函数的指针。
但是,free requires传递了malloc
,calloc
或realloc
返回的指针,否则会发生未定义的行为。
当您的函数返回或退出时,将释放对象的内存。