我有一个与uEye USB3相机通信的mex文件,以输入参数指定的分辨率和帧率捕获一段视频,并将其导出为.tif图像的堆栈。在mex文件返回之前,我释放了用于存储图像的缓冲区,但是这个内存不再可用于系统,它似乎仍然分配给matlab。进一步调用mex函数似乎可以重用这个内存,但是如果不重新启动matlab,我就无法将它释放到更广泛的系统中。运行clear mex
或clear all
似乎对此没有影响,确实clear all
偶尔会因为分段错误而使matlab完全崩溃。我很确定这不是我的C ++的错误,因为如果我在直接C ++中重写相同的函数,我会看到内存被释放应该是。
使用
取消分配我的记忆is_UnlockSeqBuf(hCam, nMemID, pBuffer);
is_ClearSequence (hCam);
int k=0;
while (k < frame_count){
int fMem = is_FreeImageMem(hCam, pFrameBuffer[k], pFrame[k]);
k++;
}
先前已经分配了
for (int i = 0; i < frame_count;i++){
int nAlloc = is_AllocImageMem (hCam, width,height, 24, &pFrameBuffer[i], &pFrame[i]);
int nSeq = is_AddToSequence(hCam, pFrameBuffer[i], pFrame[i]);
pFrame[i] = i + 1;
}
有没有人对如何在不重启matlab的情况下释放内存有任何想法?