Mex文件:mxCreateXXX只在main mexFunction()里面?

时间:2015-10-12 12:31:42

标签: matlab mex

我在这里有一个非常基本的mex文件示例:

#include "mex.h"
#include "matrix.h"

void createStructureArray(mxArray* main_array)
{
    const char* Title[] = { "first", "second" };
    main_array = mxCreateStructMatrix(1,1, 2, Title);
}


void mexFunction(mwSize nlhs, mxArray *plhs[], mwSize nrhs,
             const mxArray *prhs[])
{
    double* x = mxGetPr(prhs[0]);
    if (*x < 1.0)
    {
        //This works
        const char* Title[] = { "first", "second" };
        plhs[0] = mxCreateStructMatrix(1,1, 2, Title);
    }
    else
    {
      //This does not
      createStructureArray(plhs[0]);
    }
}

此函数应始终返回包含元素firstsecond的结构。无论输入如何,我都期望输出相同。然而,输入参数&lt; 1,一切都按预期工作,但&gt; 1我收到一条错误消息:

>> a = easy_example(0.0)

a = 

 first: []
second: []

>> a = easy_example(2.0)
One or more output arguments not assigned during call to "easy_example".

因此,我是否可以在mxCreateStructMatrix之外调用mexFunction函数,或者在传递指针时是否做错了什么?

1 个答案:

答案 0 :(得分:3)

你对mex没有问题,但有指针​​!

尝试将您的功能更改为:

void createStructureArray(mxArray** main_array)
{
    const char* Title[] = { "first", "second" };
    *main_array = mxCreateStructMatrix(1,1, 2, Title);
}

和函数调用

createStructureArray(&plhs[0]);

您的问题是plhs[0]mxArray,但为了返回它,您需要将指针传递给mxArray