c++memory-leaksout-of-memoryntl

free memory for matrix in NTL (Number Theory Library)


everyone! I'm using NTL inside the SGX enclave. When I run the application, I got the issue about out of memory. Then I checked the memory, I guess it's due to the heavy use of the NTL matrix.

The basic use of matrix in NTL:

Mat<size_t> mtemp;
mtemp.SetDims(num_row, num_col);

In NTL matrix.cpp, I didn't find any function to free memory.

For kill(), the implementation is about swap():

template<class T>
void Mat<T>::kill()  
{  
   Mat<T> tmp;
   this->swap(tmp);
}  

void swap(Mat& other)
   {
      _mat__rep.swap(other._mat__rep);
      _ntl_swap(_mat__numcols, other._mat__numcols);
   }

template<class T>
void _ntl_swap(T*& a, T*& b)
{
   T* t = a; a = b; b = t;
}

This cannot help free the memory of the matrix. How can I free memory after the use?


Solution

  • The kill() function should do that.
    Assuming Mat::~Mat() is implemented to release memory.

    template<class T>
    void Mat<T>::kill()  
    {  
       // This allocates an object with absolute minimum size (probably zero).
       Mat<T> tmp;
    
    
       // Now you swap the zero size matrix with your current matrix
       // memory. 
       this->swap(tmp);
    
       // So your object `this` now holds a zero size matrix.
       // While the object `tmp` holds what used to be in this object.
       // So all the dynamically allocated memory is now inside `tmp`
    }
    // At this point `tmp` goes out of scope.
    // This causes the destructor of `tmp` to be called which
    // deallocates the memory that you used to have.
    //
    // So at this point your object holds a mtrix of zero size.
    // and all the old memory has been deallocated.