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

When to free allocated memory in mex file

我对在 mex 代码中分配内存的 mxMalloc 和 mxFree 有一些疑问。假设我正在将 C 代码转换为 Matlab,并且我这样分配内存:

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

in =mxGetPr(prhs[0]);

但是稍后我使用

释放内存
 mxFree(in) 

我收到分段违规错误。我想知道谁能解释我什么时候应该意识到我应该释放和分配内存。什么类型的指针应该释放,什么类型的指针不应该释放?

这里有一些问题。首先,您分配内存并让指针 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);