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 风格的索引从 0
到 N-1
而不是 1
到 N
(如在 MATLAB 中),因此您的循环终止条件应该是 j<(58*2)
而不是 <=
。
您可能还需要仔细检查外部循环的循环终止条件(超过 i
),因为尽管您为 11 个元素分配了内存,但它只会循环超过 10 个元素。
【讨论】:
非常感谢,您小心!以上是关于matlab多次调用mex函数后没有响应的主要内容,如果未能解决你的问题,请参考以下文章