多次调用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;
}
- 当我在命令 window 中调用 mex 函数时,如下所示:
for i = 1:100
A = createTrees;
end
Matlab 长时间运行后无响应。
- 如果我删除代码:
for(int j = 0; j<=(58*2);j++) {
mean[j] = (double)j;
}
来自mex函数,“Matlab长时间运行后无响应”的情况。会消失。
那么,我该如何解决 "No response" 问题。
非常感谢。
有问题的 for 循环正在越界访问数组。 C 风格的索引从 0
到 N-1
而不是 1
到 N
(如在 MATLAB 中),所以你的循环终止条件应该是 j<(58*2)
而不是<=
.
您可能还想仔细检查外循环的循环终止条件(超过 i
),因为尽管您为 11 个元素分配了内存,但它只循环了 10 个元素。
我希望有人可以帮助我解决我编写的一些 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;
}
- 当我在命令 window 中调用 mex 函数时,如下所示:
for i = 1:100
A = createTrees;
end
Matlab 长时间运行后无响应。
- 如果我删除代码:
for(int j = 0; j<=(58*2);j++) {
mean[j] = (double)j;
}
来自mex函数,“Matlab长时间运行后无响应”的情况。会消失。 那么,我该如何解决 "No response" 问题。 非常感谢。
有问题的 for 循环正在越界访问数组。 C 风格的索引从 0
到 N-1
而不是 1
到 N
(如在 MATLAB 中),所以你的循环终止条件应该是 j<(58*2)
而不是<=
.
您可能还想仔细检查外循环的循环终止条件(超过 i
),因为尽管您为 11 个元素分配了内存,但它只循环了 10 个元素。