关于matlab mex文件内存的问题

时间:2011-05-17 17:32:34

标签: matlab memory mex

嘿那里, 假设我在mex例程中有以下代码:

mxArray *newPoint = mxDuplicateArray(prhs[0]);
double *newPointData = mxGetPr(newPoint);
newPoint = mxDuplicateArray(prhs[1]);

我还要再次更新newPointData以指向新的mxArray吗?那newPoint第一次出现的记忆是什么?我是否还需要通过mxDestroyArray(newPoint);销毁它,因为如果我不这样做,我会在重新分配newPoint之后将地址丢失。

谢谢!

编辑:为了更好地理解内存分配问题,请对此进行颠覆!

2 个答案:

答案 0 :(得分:2)

mxDuplicateArray分配一个新数组并复制数据。每个新的重复数组都将其数据存储在不同的内存区域中。

所以,是的,在每次调用mxGetPr()后,您必须使用mxDuplicateArray()来获取数据的地址。

当然,必须释放已分配的数组。为此,您需要保留创建的每个mxArray的原始指针(mxDuplicateArray返回的那个)。

最后,在获取数据地址后,无法销毁mxArray(使用mxGetPr)。否则,您正在访问已被解除分配的内存,并且可能由其他代码再次分配用于不同目的。

答案 1 :(得分:1)

请注意mxDuplicateArray在某些情况下不会执行深层复制: http://jp.mathworks.com/matlabcentral/newsreader/view_thread/310346

错误没有修复,关于该功能的文档仍然是错误的。