我有一些关于mxMalloc和mxFree的问题,用于在mex代码中分配内存。假设我正在将C代码转换为Matlab,并按照以下方式分配内存:
in= mxMalloc(sizeof(double)*N);
in =mxGetPr(prhs[0]);
然而,稍后我使用
释放内存 mxFree(in)
我收到细分违规错误。我想,任何人都可以解释我何时应该意识到我应该释放并分配内存。应该释放什么类型的指针以及不应该释放哪种类型?
答案 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);