多次调用mex函数后,matlab没有响应

时间:2016-09-27 15:40:20

标签: c++ c matlab mex

我希望有人可以帮助我解决我已经写过的一些mex代码的问题。     在多次调用相同的mex函数之后,matlab将没有响应。我在这里发布代码:

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:
  2.   
        

    表示i = 1:100

             

    A = createTrees;

             

      

    Matlab在长时间运行后没有响应。

    1. 如果我删除了代码:
    2. for(int j = 0; j<=(58*2);j++) {
          mean[j] = (double)j;
      }
      

      从mex函数来看,“Matlab在长时间运行后没有响应”的情况将会消失。 那么,我怎样才能解决&#34;无响应&#34;问题。 非常感谢。

1 个答案:

答案 0 :(得分:0)

有问题的for循环是访问数组越界。 C样式索引从0变为N-1而不是1N(如在MATLAB中),因此您的循环终止条件应为j<(58*2)而不是<= i

您可能还想仔细检查外部循环的循环终止条件(超过bar = dive bar bar = club bar = wine bar bar = beer on tap dive bar = club dive bar = wine bar dive bar = beer on tap club = wine bar club = beer on tap wine bar = beer on tap ),因为尽管您为11分配了内存,但这只会循环10个元素。