I got a follow up question about Matlab mex function input/output 2D array format. For example, I have a variable '`outputBuff`' defined as C++ 2D integer array. After processing it, I want to output it as a 'plhs' (parameter at left hand side). Not sure how to do this.
int** outputBuff; size_t col_outputBuff = mxGetN(prhs[4]); size_t row_outputBuff = mxGetM(prhs[4]); // Allocate the memory for 2D array outputBuff = (int **)mxCalloc(col_outputBuff, sizeof(int*)); for(int x = 0; x < col_outputBuff; x++) { outputBuff[x] = (int *) mxCalloc(row_outputBuff, sizeof(int)); } // Read in the data for (int col=0; col < col_outputBuff; col++) { for (int row=0; row < row_outputBuff; row++) { outputBuff[col][row] = ((int *)mxGetPr(prhs[4]))[row+col*row_outputBuff]; } }
Then output it as `plhs`
const mwSize dims[] = {col_outputBuff, row_outputBuff}; plhs[0] = mxCreateNumericArray(2, dims, mxINT32_CLASS, mxREAL); mxArray *outputMatrix; outputMatrix = mxCreateNumericMatrix(col_outputBuff, row_outputBuff, mxINT32_CLASS, mxREAL); outputBuff[0] = (int *)mxGetPr(outputMatrix); outputMatrix = (mxArray *)mxGetData(plhs[0]);
The codes can be compiled but output all zeros not as expected. Could you give me some hints? Thanks a lot.
Best Answer