在c++中释放内存(armadillo)

Free memory in c++ (armadillo)

本文关键字:armadillo 内存 释放 c++      更新时间:2023-10-16

我想在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*)’
有谁能给我指路吗?
cx_mat ii(2,2,fill::eye);

它是在堆栈上分配的,你不能释放它,当你的程序退出作用域时,它将被销毁。

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

您只能 free指针包含malloc, callocrealloc返回的地址。什么都没有。特别是,没有矩阵。

你也不应该在c++中使用free,永远。

在您的情况下,您不需要做任何事情来释放内存,矩阵的析构函数将负责。

你得到这个错误的原因是你没有传递一个指向函数的指针。

但是,free要求传递一个已经由malloccallocrealloc返回的指针,否则会发生未定义的行为。

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