简单的 mex 文件崩溃?

Simple mex file crash?

我正在学习 matlab 中的 mex 文件。我写了这个简单的代码

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){

    double *outData, *inData;

    if(nrhs!=2) mexErrMsgTxt("Missing input data.");

    inData = mxGetDoubles(prhs[0]);
    outData = mxGetDoubles(plhs[0]);
    
    outData[0] =  inData[0]+inData[1];
}

但是当我尝试 运行 它时,matlab 崩溃了。问题是最后一行,你有什么建议吗?

谢谢

plhs[0](即函数调用左侧的指针)是输出。

这个输出变量没有在内存中分配,你只有一个指向它的指针。所以如果不先创建它就不能在上面写(也不能读)。

所以你需要像

这样的东西
const int ndims = 1; // or whatever dims you want
const mwSize dims[]={1}; // or whatever size you want

// create memory/variable 
plhs[0] = mxCreateNumericArray(ndims ,dims,mxDOUBLE_CLASS,mxREAL);
// now it exists
outData = mxGetDoubles(plhs[0])

但是请注意,如果您不输入长度为 2 的数组,inData[1] 将不存在,从而导致 RuntimeError,从而导致 MATLAB 崩溃。因此,在访问数组之前检查数组的长度通常是个好习惯。