Skip to content

内存泄漏 #23

@ZhangYich

Description

@ZhangYich

不知道为什么,把下面函数返回的 unsigned char* 值给cv::Mat之后会导致内存泄漏

unsigned char* JpegCoderImage::buffer() {
	nvjpegImage_t* img = ((nvjpegImage_t*)(this->img));
	size_t size = height * width * 3;
	unsigned char* buffer = (unsigned char*)malloc(size);
	cudaMemcpy(buffer, img->channel[0], size, cudaMemcpyDeviceToHost);

	return buffer;
}
JpegCoderImage* jpgImage = decode((const unsigned char *)(pchData.data()), file_size);

img = cv::Mat(jpgImage->height, jpgImage->width, CV_8UC3, jpgImage->buffer());

delete jpgImage;

好像是 buffer 导致内存无法释放?

我现在的做法是:

unsigned char* JpegCoderImage::buffer() {
	nvjpegImage_t* img = ((nvjpegImage_t*)(this->img));
	//size_t size = height * width * 3;
	//unsigned char* buffer = (unsigned char*)malloc(size);
	//cudaMemcpy(buffer, img->channel[0], size, cudaMemcpyDeviceToHost);

	return img->channel[0];
}
JpegCoderImage* jpgImage = decode((const unsigned char *)(pchData.data()), file_size);

img = cv::Mat(jpgImage->height, jpgImage->width, CV_8UC3);

cudaMemcpy(img.data, jpgImage->buffer(), jpgImage->height * jpgImage->width * 3, cudaMemcpyDeviceToHost);

delete jpgImage;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions