passing varibales to mex
Info
This question is closed. Reopen it to edit or answer.
Show older comments
Hi,
I have a question regarding MEX memory allocation. I am novice to writing mex files, so I apologize in advance for a very fundamental question.
I have a code which looks something like this -->
double *x
x = mxGetPr(prhs[0]);
blahblah(x) ; // changes value of x
plhs[0] = mxCreateNumericArray(1,dim,mxDOUBLE_CLASS, mxREAL); // dim is a const size_t
mxSetPr(plhs[0],x);
(I have Matlab17b so I am not using mxSetDoubles)
Does this piece of code make a copy of the variable x or simply assigns the pointer of x into plhs? In my opinion the use of mxCreateNumericArray will make a copy of x. Is my understanding correct?
Also, what is the best way to pass a variable to my mex function, change it, and return it back to Matlab without making a copy in c++.
Thank you
-PT
1 Comment
OCDER
on 8 Jan 2019
Are you trying to do in-place replacement of values of a large array via MEX routines? Take a look at these.
Answers (1)
Jan
on 8 Jan 2019
Edited: James Tursa
on 8 Jan 2019
1 vote
mxCreateNumericArray creates a new variable. Overwriting the pointer to the reserved memory by mxSetPr will leak the memory and sharing the memory of the input and output will confuse Matlab's memory manager remarkably: It will crash.
To duplicate a variable use mxDuplicateArray. If you are a newcomer, avoid smart inplace techniques at first. They are tricky, not documented and prone to hard errors in the old R2017b API.
This question is closed.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!