Access to matrices stored inside cell arrays using MEX files in MATLAB

I am currently writing a MEX function that should work with an array of cells in MATLAB. The MEX file is written in C.

In fact, the input to my function will be an array of cells, where each record is a numerical matrix with real values. A simple example:

C = cell(1,2);
C{1} = ones(10,10);
C{2} = zeros(10,4);

I would like to have access to the numeric arrays C {1} and C {2} in my MEX file. Ideally, I would like to do this without creating a second copy of the data in my MEX file (i.e. I get pointers for them).

Using the previous example, my current approach is as follows:

/* declare a pointer variable to the incoming cell array after it is passed to the MEX function */
mxArray C_CELL = (mxArray *) mxGetData(prhs[0]) 

/* declare  a 2 x 1 array of pointers to access the cell array in C */
double *myarray[2] //

/* point towards the contents of C_CELL */
myarray[0] = mxGetPr(C_CELL[0])
myarray[1] = mxGetPr(C_CELL[1])

Unfortunately, this seems to lead to "misuse of undefined errors like" struct mxArray_tag ".

+3
source share
2

:

  • mxArray : , mxArray *C_CELL.

, , , .

, mxGetData mxArray *. mxGetData , raw (void *) . mxArray .

, C_CELL mxArray **C_CELL. , - segfaults. mxGetCell, @David Heffernan, ( , prhs[0] ).

+4

mxGetCell, .

mxArray *cellArray[2];
cellArray[0] = mxGetCell(prhs[0], 0);
cellArray[1] = mxGetCell(prhs[0], 1);
+6

All Articles