我正在尝试了解 matlab 和 mex 文件,并编写了以下用 C 语言编写的非常简单的代码,供 matlab 调用:
#include "mex.h"
void aplusb(int x, int y, int *z)
{
z=x+y;
}
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
int *x;
int *y;
int *z;
if(nrhs<2)
{
mexErrMsgIdAndTxt( "MATLAB:aplusb:invalidNumInputs", "Need 2 values to sum");
}
else if(nlhs>2)
{
mexErrMsgIdAndTxt( "MATLAB:aplusb:invalidNumInputs", "Need one value to return.");
}
z = mxGetPr(plhs[0]);
x = mxGetPr(prhs[0]);
y = mxGetPr(prhs[1]);
aplusb(x,y,z);
}
问题
我可以用 mex aplusb.c 正确编译代码。只返回一些警告:
aplusb.c:5:4: warning: assignment makes pointer from integer without a cast
aplusb.c: in function ‘mexFunction’:
aplusb.c:25:5: warning: assignment from incompatible pointer type
aplusb.c:26:5: warning: assignment from incompatible pointer type
aplusb.c:27:5: warning: assignment from incompatible pointer type
但是当我运行调用 .c 文件的 .m 文件时,matlab 会因分段违规而崩溃。
如果编译正常,我的代码有什么问题?