简单的 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 崩溃。因此,在访问数组之前检查数组的长度通常是个好习惯。
我正在学习 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 崩溃。因此,在访问数组之前检查数组的长度通常是个好习惯。