如何从Matlab C Mex函数中获取两个输出?

时间:2011-06-16 12:48:27

标签: c matlab

我知道如何用一个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类型,另一个是整数类型?

1 个答案:

答案 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);
    }
}