1

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

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

我是否必须再次更新 newPointData 以指向新的 mxArray?那么第一次出现newPoint指向的内存呢?我是否还需要销毁该 via,mxDestroyArray(newPoint);因为如果我不这样做,我会在重新分配newPoint.

谢谢!

编辑:请注意这个问题,以便更好地理解内存分配问题!?

4

2 回答 2

2

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

所以,是的,你必须mxGetPr()在每次调用mxDuplicateArray().

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

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

于 2011-05-25T10:13:08.347 回答
1

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

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

于 2014-11-19T06:47:49.377 回答