我希望有人可以幫我解決一些我寫過的mex代碼的問題。 多次調用相同的mex函數後,matlab將沒有響應。我張貼在這裏的代碼:matlab在多次調用mex函數後沒有任何反應
void mexFunction(int nlhs, mxArray *plhs[], /* Output variables */
int nrhs, const mxArray *prhs[]) /* Input variables */
{
const char *fieldnames[3]; //This will hold field names.
fieldnames[0] = (char*)mxMalloc(20);
fieldnames[0] = "mean";
plhs[0] = mxCreateCellMatrix(11, 1);
mxArray *cells = plhs[0];
mxArray *treeNodeMean;
double *mean;
for(int i = 0; i < 10; ++i) {
mxArray* treeNode = mxCreateStructMatrix(1,1,1,fieldnames);
mxSetCell(cells, i , treeNode);//set treeNode to tree
//initialize
treeNodeMean = mxCreateDoubleMatrix(2,58, mxREAL);
//set values
mean = mxGetPr(treeNodeMean);
for(int j = 0; j<=(58*2);j++) {
mean[j] = (double)j;
}
//set treeNode
mxSetFieldByNumber(treeNode,0,0, treeNodeMean);//(pointer,index,fieldNumber,value)
}
return;
}
- 當我調用MEX功能在命令窗口作爲fllow:
對於i = 1:100
A = createTrees;
端
Matlab的不響應後長乳寧。
- 如果刪除的代碼:
for(int j = 0; j<=(58*2);j++) {
mean[j] = (double)j;
}
從MEX功能,「Matlab的不響應後長乳寧的情況。 「 會消失。 那麼,我該如何解決「無響應」問題。 非常感謝。
分配內存,目前還不清楚是什麼你的問題是。什麼樣的代碼引發了錯誤?你能從循環中提取工作代碼到新功能嗎? – proton
製作第二個版本,不使用mex特定的東西(例如,使用'malloc'進行正常分配,順便推薦在這裏放置C++標籤),然後在沒有matlab的情況下測試邏輯。在標準的C IDE的調試器中,您將有更容易的時間調試。一旦你知道邏輯是可靠的,那麼就重新mexify。您也可以將IDE的調試器附加到matlab中,並使用調試器捕獲崩潰。 – user4581301