首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中从char*释放数据

在C++中从char*释放数据
EN

Stack Overflow用户
提问于 2014-01-07 22:08:33
回答 2查看 798关注 0票数 1

我从uEye工业相机中提取数据,并通过相机的应用程序接口检索图像。

我的代码看起来像这样:

代码语言:javascript
复制
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的函数中初始化摄像头:

代码语言:javascript
复制
// 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;
}
EN

回答 2

Stack Overflow用户

发布于 2014-01-07 22:11:46

The API Documentation似乎暗示有一个相应的is_FreeImageMem函数。你试过吗?

编辑:看起来is_GetImageMem可能不会分配内存。从它的描述来看:

is_GetImageMem()返回上次用于图像捕获的图像内存的起始地址。

你要给is_AllocImageMem anywhere打电话吗?

票数 3
EN

Stack Overflow用户

发布于 2014-01-08 00:36:12

我在代码上运行valgrind,输出可能丢失了大约16,000,000字节,间接丢失了大约20,000,000字节。

从get_image检索图像并将其分配给img时,img被作为数据分配给OpenCV IplImage,如下所示:

代码语言:javascript
复制
  IplImage* src = cvCreateImage(cvSize(752,480), IPL_DEPTH_8U, 1);
  src -> imageData = img;

IplImage被保留了下来,所以我不得不对存储在内存中的IplImage调用cvReleaseImage。现在valgrind报告间接损失为0,可能损失约160万。仍然没有解释160万,但我认为IplImage是内存泄漏的主要原因

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20973737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档