我对mxMalloc和mxFree在mex代码中分配内存有一些疑问。假设我正在将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);