何时在mex文件中释放已分配的内存

时间:2016-07-04 18:15:05

标签: c matlab memory malloc mex

我有一些关于mxMalloc和mxFree的问题,用于在mex代码中分配内存。假设我正在将C代码转换为Matlab,并按照以下方式分配内存:

in= mxMalloc(sizeof(double)*N);

in =mxGetPr(prhs[0]);

然而,稍后我使用

释放内存
 mxFree(in) 

我收到细分违规错误。我想,任何人都可以解释我何时应该意识到我应该释放并分配内存。应该释放什么类型的指针以及不应该释放哪种类型?

1 个答案:

答案 0 :(得分:0)

这里有一些问题。首先,您分配内存并使指针in指向此新数据。

in = mxMalloc(sizeof(double)*N);

这是完全没必要的,因为您放弃了这些数据,而是将指针in指向MATLAB为您的函数提供的输入之一

in = mxGetPr(prhs[0]);

in现在指的是MATLAB为您的函数提供的数据,MATLAB期望这些数据保留在那里。如果您致电mxFree将其释放,那么当MATLAB稍后尝试访问此数据时会无法访问此数据,从而导致您的分段违规错误。

如果您没有重新分配in指向输入数据,只有在您不打算传递指向该数据的指针时,才可以使用mxFree将其释放回到MATLAB。

in = mxMalloc(sizeof(double) * N);
mxFree(in);