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

Posted

技术标签:

【中文标题】matlab多次调用mex函数后没有响应【英文标题】:matlab have no response after calling a mex function many times 【发布时间】:2016-09-27 15:40:20 【问题描述】:

我希望有人可以帮助我解决我在编写一些 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;


    当我在命令窗口中调用 mex 函数时:

对于 i = 1:100

A = 创建树;

结束


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

    如果我删除代码:

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


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

【问题讨论】:

不清楚您的问题是什么。代码的哪一部分引发了错误?你能从循环中提取工作代码到新函数吗? 制作没有 mex 特定内容的第二个版本(例如,使用 malloc 进行正常分配。顺便建议在此处删除 C++ 标签)并在没有 matlab 的情况下测试逻辑。在标准 C IDE 的调试器中进行调试会容易得多。一旦你知道逻辑是可靠的,然后重新mexify。您还可以将 IDE 的调试器附加到 matlab 并使用调试器捕获崩溃。 【参考方案1】:

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

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

【讨论】:

非常感谢,您小心!

以上是关于matlab多次调用mex函数后没有响应的主要内容,如果未能解决你的问题,请参考以下文章

多次 SignalR 调用使 UI 没有响应

为啥这段代码没有调用 Matlab 函数

服务器在一分钟内多次发布请求后没有响应

matlab中的plot函数怎样在c语言中实现

matlab中imagesc如何用C语言去实现

如何在从 Matlab 调用的 mex 函数中使用 Matlab 引擎