Problems with memory using mexFiles and OpenSim API

Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
POST REPLY
User avatar
Roger Pallarès López
Posts: 6
Joined: Mon Feb 13, 2017 6:25 am

Problems with memory using mexFiles and OpenSim API

Post by Roger Pallarès López » Mon Oct 23, 2017 9:03 am

Hi all,
I'm using a MEXfile C++ code for an optimization task using GPOPS in MATLAB and programming OpenSim libraries with C++. I noticed that memory is not freed at each iteration of the optimization, so after a number of iterations MATLAB crashes due to a no memory space error (RAM memory in Task Manager is completely full). As I'm new in programming MEXfiles I have low experience in this kind of memory errors. I tried to delete the memory stored in pointers but I couldn't manage to solve the problem. I thought the cause of this issue could be that pointers don't free the memory stored, but I'm not completely sure. Also, I thought about being a problem of an OpenSim function or maybe a bad compilation of the mexFunction.
If anyone has any idea of how I can solve it or any experience of this issue, I would really appreciate any help or advice.

I attach the mexFunction code, I thought it would be better not to make a long piece of code, but I can provide the subroutine function with all the OpenSim functions as well if necessary.

Code: Select all

void mexFunction(int nlhs, mxArray *plhs[],
          int nrhs, const mxArray *prhs[])
  {
      double *a, *b, *c, *d, *f;
      int status,mrows,ncols; 
      /* Create a pointers to the input matrices. */
      a = mxGetPr(prhs[0]);
      b = mxGetPr(prhs[1]);
      c = mxGetPr(prhs[2]);
      d = mxGetPr(prhs[3]);
      /* Get the dimensions of the input matrices. */
      mrows = mxGetM(prhs[0]);
      ncols = mxGetN(prhs[0]);
      /* Set the output pointer to the output matrix. */
      plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL);
      /* Create a C pointer to a copy of the output matrix. */
      f = mxGetPr(plhs[0]);
      /* Call the C++ subroutine. */
      ID_mexfile_v2(a,b,c,d,f,mrows,ncols);    
  }

POST REPLY