2016-09-27 35 views
1

我希望有人可以幫我解決一些我寫過的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; 
} 

  1. 當我調用MEX功能在命令窗口作爲fllow:

對於i = 1:100

A = createTrees;


Matlab的不響應後長乳寧。

  • 如果刪除的代碼:

  • for(int j = 0; j<=(58*2);j++) { 
        mean[j] = (double)j; 
    } 
    

    從MEX功能,「Matlab的不響應後長乳寧的情況。 「 會消失。 那麼,我該如何解決「無響應」問題。 非常感謝。

    +0

    分配內存,目前還不清楚是什麼你的問題是。什麼樣的代碼引發了錯誤?你能從循環中提取工作代碼到新功能嗎? – proton

    +0

    製作第二個版本,不使用mex特定的東西(例如,使用'malloc'進行正常分配,順便推薦在這裏放置C++標籤),然後在沒有matlab的情況下測試邏輯。在標準的C IDE的調試器中,您將有更容易的時間調試。一旦你知道邏輯是可靠的,那麼就重新mexify。您也可以將IDE的調試器附加到matlab中,並使用調試器捕獲崩潰。 – user4581301

    回答

    0

    有問題的for循環訪問數組越界。 C風格索引從0N-1而不是1N(如在MATLAB中),所以你的循環終止條件應該是j<(58*2)而不是<=

    您可能還需要仔細檢查循環終止條件爲您的外環(超過i),因爲那是唯一的循環超過10元,儘管你11

    +0

    非常感謝,你很謹慎! – mengranlin

    相關問題