我知道如何用一个double类型的输出编写基本的C Mex函数。我尝试用两个输出写一个C Mex,但是我遇到了分段违规错误。第一个输出是double,第二个是整数。这是我尝试分配输出指针的代码:
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); //works fine
plhs[1] = mxCreateNumericArray(1, 1, mxINT32_CLASS, mxREAL); //causes segmentation violation
我搜索了互联网,但几乎所有的例子都只有一个输出或相同类型的输出。如何获得两个输出,一个是double类型,另一个是整数类型?
答案 0 :(得分:5)
首先,您正在错误地调用mxCreateNumericArray。你需要做这样的事情:
#include "mex.h"
void mexFunction( int nlhs, mxArray * plhs[],
int nrhs, const mxArray * prhs[] ) {
plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
if ( nlhs > 1 ) {
mwSize nd = 2;
mwSize dims[] = { 3, 4 };
plhs[1] = mxCreateNumericArray(nd, dims, mxINT32_CLASS, mxREAL);
}
}