Matlab的C ++ - 接收动态大小输出类型(emxArray_real_T)(Matlab

2019-10-20 10:25发布

我已经转换一些matlab代码到C ++使用编码器。

void myfunction(const emxArray_real_T *input, emxArray_real_T *output){ ... }

我必须设置为发送emxArray_real_T没有任何问题类型的输入。 如何设置接收在C ++中被调用动态大小输出myfunction

代码更新:

main(){ 
. 
. 
. 
double *inputVec; 
inputVec=(double*)malloc(1000 * sizeof(double)); 
emxArray_real_T *input;
emxArray_real_T *output;

input=emxCreateWrapper_real_T(&inputVec[0],1,1000); 
output = emxCreateWrapper_real_T(NULL,0,0);

myfunction(input,output); 

emxDestroyArray_real_T(input);
emxDestroyArray_real_T(output);
.
.
}

这将编译得很好,但说法错误出*** glibc detected *** /data/myscript : double free or corruption (!prev): 0x000000000de54920 ***

Answer 1:

您可以检查https://stackoverflow.com/a/24271438/3297440这似乎涵盖了类似的问题。

在这种特殊情况下,这个问题是可能的内存指向output从未被初始化。 您可以使用一个emxCreate*函数myfunction_emxAPI.h初始化一个空emxArray并把它传递。之间的选择emxCreateWrapper_real_TemxCreate_real_T依赖于你是否希望自己分配给数据的存储。 前者把所有权在你的手,当后者被用来emxArray拥有的内存。

就像是:

output = emxCreateWrapper_real_T(NULL,0,0);

在调用之前myfunction应该做的伎俩。

顺便说一句,不要忘记调用:

emxDestroyArray_real_T(input);
emxDestroyArray_real_T(output);

在最后清理内部分配的任何内存emxArrays 。 即使使用包装函数,存储在尺寸矢量可以被分配。



文章来源: Matlab C++ - Receive Dynamic Size Output type (emxArray_real_T)