我有一些关于mxMalloc和mxFree在mex代码中分配内存的问题。假设我将C代码转换为Matlab,并分配内存如下:
in= mxMalloc(sizeof(double)*N);
in =mxGetPr(prhs[0]);但是,当以后我使用
mxFree(in) 我收到分段违规错误。我想知道谁能解释我什么时候应该意识到我应该释放并分配内存。哪些类型的指针应该被释放,哪些类型不应该被释放?
发布于 2016-07-04 18:16:34
这里有几个问题。首先,分配内存,并让指针in指向这些新数据。
in = mxMalloc(sizeof(double)*N);这是完全不必要的,因为您随后放弃了这些数据,而是让指针in指向MATLAB提供给您的函数的输入之一。
in = mxGetPr(prhs[0]);in现在是指MATLAB提供给您的函数的数据,MATLAB希望这些数据保持在那里。如果您调用mxFree来释放它,那么MATLAB在以后尝试访问该数据时将无法访问它,从而导致您的分段违规错误。
如果您没有重新分配in来指向输入数据,那么只有当您不计划将指向该数据的指针传递回MATLAB时,才可以使用mxFree来释放它。
in = mxMalloc(sizeof(double) * N);
mxFree(in);https://stackoverflow.com/questions/38190312
复制相似问题