フィルターのクリア

Info

この質問は閉じられています。 編集または回答するには再度開いてください。

passing varibales to mex

1 回表示 (過去 30 日間)
PT
PT 2019 年 1 月 8 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
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 件のコメント
OCDER
OCDER 2019 年 1 月 8 日

回答 (1 件)

Jan
Jan 2019 年 1 月 8 日
編集済み: James Tursa 2019 年 1 月 8 日
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.

この質問は閉じられています。

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by