Mex 文件:mxCreateXXX 仅在 main mexFunction() 内部?
Mex files: mxCreateXXX only inside main mexFunction()?
我这里有一个非常基本的 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]);
}
}
此函数应始终 return 具有元素 first
和 second
的结构。无论输入如何,我都希望得到相同的输出。然而,输入参数 < 1,一切都按预期工作,但是 > 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".
所以,我是不是可以不在mexFunction
外面调用mxCreateStructMatrix
函数,还是我传递指针的时候做错了什么?
你对 mex
没有问题,但对指针有问题!
尝试将您的功能更改为:
void createStructureArray(mxArray** main_array)
{
const char* Title[] = { "first", "second" };
*main_array = mxCreateStructMatrix(1,1, 2, Title);
}
和对
的函数调用
createStructureArray(&plhs[0]);
您的问题是 plhs[0]
是一个 mxArray
,但是为了 return 它,您需要将指针传递给 mxArray
!
我这里有一个非常基本的 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]);
}
}
此函数应始终 return 具有元素 first
和 second
的结构。无论输入如何,我都希望得到相同的输出。然而,输入参数 < 1,一切都按预期工作,但是 > 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".
所以,我是不是可以不在mexFunction
外面调用mxCreateStructMatrix
函数,还是我传递指针的时候做错了什么?
你对 mex
没有问题,但对指针有问题!
尝试将您的功能更改为:
void createStructureArray(mxArray** main_array)
{
const char* Title[] = { "first", "second" };
*main_array = mxCreateStructMatrix(1,1, 2, Title);
}
和对
的函数调用createStructureArray(&plhs[0]);
您的问题是 plhs[0]
是一个 mxArray
,但是为了 return 它,您需要将指针传递给 mxArray
!