【发布时间】:2014-01-25 06:14:27
【问题描述】:
我正在从 uEye 工业相机中提取数据,并通过相机的 API 检索图像。
我的代码如下所示:
bool get_image(char*& img)
{
void *pMemVoid; //pointer to where the image is stored
// Takes an image from the camera. If successful, returns true, otherwise
// returns false
if (is_GetImageMem(hCam, &pMemVoid) == IS_SUCCESS){
img = (char*) pMemVoid;
pMemVoid = NULL;
return true;
}
else
return false;
}
我正在检索一张图片数据,如果成功则返回true,否则返回false。
问题是我相信我正在使用 img = (char*) pMemVoid 泄漏内存,因为我反复调用此函数而不释放此数据。如何释放分配给 img 的内存?
编辑:
我在使用 is_AllocImageMem 的函数中初始化相机:
// Global variables for camera functions
HIDS hCam = 0;
char* ppcImgMem;
int pid;
/* Initializes the uEye camera. If camera initialization is successful, it
* returns true, otherwise returns false */
bool init_camera()
{
int nRet = is_InitCamera (&hCam, NULL);
is_AllocImageMem(hCam,752, 480, 1 ,&ppcImgMem, &pid);
is_SetImageMem(hCam, ppcImgMem, pid);
is_SetDisplayMode (hCam, IS_SET_DM_DIB);
is_SetColorMode (hCam, IS_CM_MONO8);
int pnCol , pnColMode;
is_GetColorDepth(hCam, &pnCol , &pnColMode);
is_CaptureVideo(hCam, IS_WAIT);
if (nRet != IS_SUCCESS)
{
if (nRet == IS_STARTER_FW_UPLOAD_NEEDED)
{
hCam = hCam | IS_ALLOW_STARTER_FW_UPLOAD;
nRet = is_InitCamera (&hCam, NULL);
}
cout << "camera failed to initialize " << endl;
return false;
}
else
return true;
}
【问题讨论】:
-
api 的文档应该告诉你这一点。他们可能有自己特殊的
free功能。 -
实际上,看着here,您似乎获得了指向其他地方拥有/管理的一些内存的指针,尽管它并不完全清楚(也许是了解这个库的人)。所以我认为你不需要在这里做任何事情。
-
您是否打算使用 get_image 函数将图像数据从相机复制到您控制的缓冲区中?
-
正确,可以控制的图像缓冲区。 img 由 get_image 使用,而 get_image 又被用作 OpenCV IplImage 的数据。我认为它重复调用 get_image 函数,但不处理每次调用 get_image 时创建的图像数据
标签: c++ memory-management memory-leaks void-pointers