Matlab在多次调用mex函数后没有响应
matlab have no response after calling a mex function many times
我希望有人能帮我解决我写的一些商业代码的问题。多次调用相同的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函数时:
for I = 1:100
A = createTrees;
结束
Matlab长时间运行后无响应。
- 如果我删除代码:
for(int j = 0; j<=(58*2);j++) {
mean[j] = (double)j;
}
来自mex函数,"Matlab长时间运行后不响应"的情况。的问题将会消失。那么,我该如何解决"无回应"的问题呢?非常感谢。
问题中的for循环正在越界访问数组。c风格索引从0
到N-1
,而不是1
到N
(如在MATLAB中),所以你的循环终止条件应该是j<(58*2)
而不是<=
。
您可能还需要仔细检查外部循环(超过i
)的循环终止条件,因为尽管您为11个元素分配了内存,但它只循环了10个元素。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么我没有得到来自OnClicked函数的响应
- 服务器 API 不响应 Curl 函数
- gcc/g++对空的主函数给出了不同的响应
- Qt程序挂起(不响应),直到函数结束,然后再次开始工作
- Matlab在多次调用mex函数后没有响应
- 要求类模板中的类型响应某个函数是否是一种好的做法