2011-05-17 100 views
1

嘿, 假设我已经在墨西哥例行下面的代码:问题有关MATLAB MEX文件存储

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

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

谢谢!

编辑:对此有所了解,以便更好地理解内存分配问题!

回答

2

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

所以,是的,你必须使用mxGetPr()每次调用mxDuplicateArray()后得到的数据的地址。

自然,分配的数组必须解除分配。为此,您需要保留创建的每个mxArray的原始指针(由mxDuplicateArray返回的指针)。

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