Matlab在多次调用mex函数后没有响应

matlab have no response after calling a mex function many times

本文关键字:响应 函数 mex 调用 Matlab      更新时间:2023-10-16

我希望有人能帮我解决我写的一些商业代码的问题。多次调用相同的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函数时:

for I = 1:100

A = createTrees;

结束

Matlab长时间运行后无响应。

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

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

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

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