mxArray *newPoint = mxDuplicateArray(prhs[0]);
double *newPointData = mxGetPr(newPoint);
newPoint = mxDuplicateArray(prhs[1]);
我还要再次更新newPointData以指向新的mxArray吗?那newPoint
第一次出现的记忆是什么?我是否还需要通过mxDestroyArray(newPoint);
销毁它,因为如果我不这样做,我会在重新分配newPoint
之后将地址丢失。
谢谢!
编辑:为了更好地理解内存分配问题,请对此进行颠覆!
答案 0 :(得分:2)
mxDuplicateArray
分配一个新数组并复制数据。每个新的重复数组都将其数据存储在不同的内存区域中。
所以,是的,在每次调用mxGetPr()
后,您必须使用mxDuplicateArray()
来获取数据的地址。
当然,必须释放已分配的数组。为此,您需要保留创建的每个mxArray的原始指针(mxDuplicateArray
返回的那个)。
最后,在获取数据地址后,无法销毁mxArray
(使用mxGetPr)。否则,您正在访问已被解除分配的内存,并且可能由其他代码再次分配用于不同目的。
答案 1 :(得分:1)
请注意mxDuplicateArray
在某些情况下不会执行深层复制:
http://jp.mathworks.com/matlabcentral/newsreader/view_thread/310346
错误没有修复,关于该功能的文档仍然是错误的。