首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab C++ -接收动态大小输出类型(emxArray_real_T)

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

Stack Overflow用户
提问于 2014-07-10 04:08:59
回答 1查看 1.3K关注 0票数 1

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

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

代码已更新:

代码语言:javascript
复制
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 ***

EN

回答 1

Stack Overflow用户

发布于 2014-07-10 07:54:51

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

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

类似于:

代码语言:javascript
复制
output = emxCreateWrapper_real_T(NULL,0,0);

在调用myfunction之前应该可以做到这一点。

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

代码语言:javascript
复制
emxDestroyArray_real_T(input);
emxDestroyArray_real_T(output);

以清除在emxArrays中分配的任何内存。即使使用包装器函数,也可以分配用于大小向量的存储。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24662937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档