多次调用mex函数后matlab无响应

matlab have no response after calling a mex function many times

我希望有人可以帮助我解决我编写的一些 mex 代码遇到的问题。 多次调用同一个mex函数后,matlab会没有反应。我post这里的代码:

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. 当我在命令 window 中调用 mex 函数时,如下所示:

for i = 1:100

A = createTrees;

end


Matlab 长时间运行后无响应。

  1. 如果我删除代码:

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

来自mex函数,“Matlab长时间运行后无响应”的情况。会消失。 那么,我该如何解决 "No response" 问题。 非常感谢。

有问题的 for 循环正在越界访问数组。 C 风格的索引从 0N-1 而不是 1N (如在 MATLAB 中),所以你的循环终止条件应该是 j<(58*2) 而不是<=.

您可能还想仔细检查外循环的循环终止条件(超过 i),因为尽管您为 11 个元素分配了内存,但它只循环了 10 个元素。