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



我知道如何编写一个带有double类型输出的基本C-Mex函数。我试着写一个有两个输出的C-Mex,但我遇到了违反分段的错误。第一个输出是一个二重,第二个是一个整数。以下是我尝试分配输出指针的代码:

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); //works fine
plhs[1] = mxCreateNumericArray(1, 1, mxINT32_CLASS, mxREAL); //causes segmentation violation

我在互联网上搜索了一下,但几乎所有的例子都只有一个或多个相同类型的输出。应该如何获得两个输出,一个是double类型,另一个是integer类型?

首先,您错误地调用了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);
    }
}

最新更新