首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时释放mex文件中分配的内存

何时释放mex文件中分配的内存
EN

Stack Overflow用户
提问于 2016-07-04 18:15:05
回答 1查看 346关注 0票数 0

我有一些关于mxMalloc和mxFree在mex代码中分配内存的问题。假设我将C代码转换为Matlab,并分配内存如下:

代码语言:javascript
复制
in= mxMalloc(sizeof(double)*N);

in =mxGetPr(prhs[0]);

但是,当以后我使用

代码语言:javascript
复制
 mxFree(in) 

我收到分段违规错误。我想知道谁能解释我什么时候应该意识到我应该释放并分配内存。哪些类型的指针应该被释放,哪些类型不应该被释放?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-04 18:16:34

这里有几个问题。首先,分配内存,并让指针in指向这些新数据。

代码语言:javascript
复制
in = mxMalloc(sizeof(double)*N);

这是完全不必要的,因为您随后放弃了这些数据,而是让指针in指向MATLAB提供给您的函数的输入之一。

代码语言:javascript
复制
in = mxGetPr(prhs[0]);

in现在是指MATLAB提供给您的函数的数据,MATLAB希望这些数据保持在那里。如果您调用mxFree来释放它,那么MATLAB在以后尝试访问该数据时将无法访问它,从而导致您的分段违规错误。

如果您没有重新分配in来指向输入数据,那么只有当您不计划将指向该数据的指针传递回MATLAB时,才可以使用mxFree来释放它。

代码语言:javascript
复制
in = mxMalloc(sizeof(double) * N);
mxFree(in);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38190312

复制
相关文章

相似问题

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