运行MEX文件时检测到错误,导致matlab崩溃?

运行MEX文件时检测到错误,导致matlab崩溃?,matlab,crash,mex,Matlab,Crash,Mex,我已经编写了一个mex函数(用C),它从matlab中获取n*4,然后将它们转换为struct,最后将k*5输出到matlab typedef矢量; typedef向量向量机; typedef数组arrayf; typedef数组arrayi; typedef结构{intc,r,w,h;float s;}框; typedef向量框; void mexFunction(int-nl,mxArray*pl[],int-nr,const-mxArray*pr[] { if(mxGetClassID(p

我已经编写了一个mex函数(用C),它从matlab中获取n*4,然后将它们转换为struct,最后将k*5输出到matlab

typedef矢量;
typedef向量向量机;
typedef数组arrayf;
typedef数组arrayi;
typedef结构{intc,r,w,h;float s;}框;
typedef向量框;
void mexFunction(int-nl,mxArray*pl[],int-nr,const-mxArray*pr[]
{
if(mxGetClassID(pr[13])!=mxSINGLE_CLASS)mexErrMsgTxt(“框必须是浮点*”);
如果((int)mxGetN(pr[13])!=4)mexErrMsgTxt(“框必须有4列”);
float*box=(float*)mxGetData(pr[13]);//输入到mex函数
int k=(int)mxGetM(pr[13]);方框;
对于(int i=0;i1){
常数mwsizeds[3]={h,w,3};
pl[1]=mxCreateNumericArray(3,ds,mxSINGLE_类,mxREAL);
V.x=(float*)mxGetData(pl[1]);V.h=h;V.w=w;
}
int n=(int)box.size();//创建到matlab的输出
pl[0]=mxCreateNumericMatrix(n,5,mxSINGLE_类,mxREAL);
float*bbs=(float*)mxGetData(pl[0]);

对于(int i=0;i我可以将代码缩减到这些行,但仍然会导致崩溃(我还没有编译任何代码,所以我在这里进行解释):


您是在调试器下运行的吗?另外,您不检查输入参数。您需要检查
pr[13]
实际上有4列,在读取之前实际上是单精度浮点。14个输入参数太多,很容易出错。如果不检查输入,任何错误都会导致MATLAB崩溃。我检查pr[13],有4列,是单精度数组。除了pr[13]之外,所有输入工作正常,但在代码中插入pr[13]时,在编译过程中未发现错误,但matlab在运行中崩溃。
bbs=edgeBoxesMex(E,O,o.alpha,o.beta,o.minScore,o.maxBoxes,...
  o.edgeMinMag,o.edgeMergeThr,o.clusterMinMag,...
  o.maxAspectRatio,o.minBoxArea,o.gamma,o.kappa,boxes);
typedef struct { int c, r, w, h; float s; } Box;
typedef vector<Box> Boxes;
void mexFunction( int nl, mxArray *pl[], int nr, const mxArray *pr[] )
{
int k=1;
Boxes boxes;
for(int i=0; i<k; i++) {
   boxes[i].s=0;
}
}
Boxes boxes(k);