nvjpeg-python icon indicating copy to clipboard operation
nvjpeg-python copied to clipboard

内存泄漏

Open ZhangYich opened this issue 1 year ago • 0 comments
trafficstars

不知道为什么,把下面函数返回的 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;

ZhangYich avatar May 11 '24 08:05 ZhangYich