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

时间:2014-07-09 20:08:59

标签: c++ matlab matlab-coder

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

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

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

代码已更新:

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 ***

1 个答案:

答案 0 :(得分: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内部分配的内存。即使使用包装函数,也可以分配大小向量的存储。