我完全是C / MEX的初学者。这是用于从MATLAB调用“魔术”函数的简单代码。我不知道为什么会收到“内存不足”消息。
#include <mex.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
#define A_IN prhs[0]
#define A_OUT plhs[0]
mxArray *R;
R=mxCreateDoubleMatrix(A_IN,A_IN,mxREAL);
mexCallMATLAB(1, R, 1, &A_IN, "magic");
A_OUT = mxDuplicateArray(R);
mxDestroyArray(R);
return;
}
A_OUT
似乎是的重复项R
。基本上,根据文档(问任何问题之前应该先读一下,只是说':)),正在创建一个new array
。调用此函数将分配更多的内存来存储此副本。
因此泄漏是来自A_OUT
。您可以使用valgrind工具来帮助您找到这些,并带有选项--leak-check=full
。当然,使用编译器的调试标志(-g3
对于gcc)进行编译,它将为您提供修复泄漏所需的大多数信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句