2011-05-17 90 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。否則,您正在訪問已被釋放的內存,並可能被其他代碼再次分配用於其他目的。