1

我已经使用 coder 将一些 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 ***

4

1 回答 1

1

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

在这种特殊情况下,问题很可能是指向的内存output从未初始化。您可以使用其中一个emxCreate*函数myfunction_emxAPI.h来初始化一个空并将其传入。在和emxArray之间的选择取决于您是否想要拥有为数据分配的内存。前者将所有权放在您手中,后者在拥有内存时使用。emxCreateWrapper_real_TemxCreate_real_TemxArray

就像是:

output = emxCreateWrapper_real_T(NULL,0,0);

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

顺便说一句,别忘了打电话:

emxDestroyArray_real_T(input);
emxDestroyArray_real_T(output);

最后清理在emxArrays. 即使使用了包装函数,也可以分配大小向量的存储空间。

于 2014-07-09T23:54:51.373 回答