jpgelib库内存释放

问题遇到的现象和发生背景

libjpge库里压缩jpge,后缓存释放报错

问题相关代码,请勿粘贴截图
jpeg_compress_struct toWriteInfo;
jpeg_error_mgr errorMgr;
toWriteInfo.err = jpeg_std_error(&errorMgr);
//注册失败的回调函数
toWriteInfo.err->error_exit = error_exit;
jpeg_create_compress(&toWriteInfo);
//保存压缩后的图片
//FILE* fp = NULL;
//_wfopen_s(&fp, L"c:\\output.jpg", L"wb+");
//jpeg_stdio_dest(&toWriteInfo, fp);
//确定要用于输出压缩的jpeg的数据空间
//void* pbak = &(*ppJpegBuffer);
jpeg_mem_dest(&toWriteInfo, (unsigned char**)ppJpegBuffer, pOutSize);

//void * pbak2 = *ppJpegBuffer;

//ppJpegBuffer = pbak;
//*ppJpegBuffer

toWriteInfo.image_width = nWidth;
toWriteInfo.image_height = nHeight;
toWriteInfo.jpeg_width = nWidth / 2;
toWriteInfo.jpeg_height = nHeight / 2;
toWriteInfo.input_components = 4;// 在此为1,表示灰度图, 如果是彩色位图,则为4
toWriteInfo.in_color_space = JCS_RGB/*JCS_EXT_BGRA*/; //JCS_GRAYSCALE表示灰度图,JCS_RGB表示彩色图像 
jpeg_set_defaults(&toWriteInfo);
jpeg_set_quality(&toWriteInfo, 50, TRUE);    //设置压缩质量100表示100%
jpeg_start_compress(&toWriteInfo, TRUE);
int nRowStride = nWidth*3;    // 如果不是索引图,此处需要乘以3
JSAMPROW row_pointer;    // 一行位图
while (toWriteInfo.next_scanline < toWriteInfo.image_height)
{
    row_pointer = (JSAMPROW)((unsigned char*)lpBmpBuffer + toWriteInfo.next_scanline*nRowStride);

        jpeg_write_scanlines(&toWriteInfo, &row_pointer, 1);

    //row_pointer[0] = NULL;
}

//ppJpegBuffer = &pbak;
//*ppJpegBuffer = &pbak2;


jpeg_finish_compress(&toWriteInfo);
jpeg_destroy_compress(&toWriteInfo);
free(*ppJpegBuffer);
运行结果及报错内容

HEAP[PaintDemo.exe]: Invalid address specified to RtlValidateHeap( 00BB0000, 028376A0 )

我的解答思路和尝试过的方法
jpeg_mem_dest(&toWriteInfo, (unsigned char**)ppJpegBuffer, pOutSize); 缓存应该是在这个函数内部申请的空间
我想要达到的结果

释放掉ppJpegBuffer这个申请的空间

jpeg_mem_dest(&toWriteInfo, (unsigned char**)ppJpegBuffer, pOutSize); 给的足够大,就不会重新分配内存
解决了,jpeg_mem_dest里面关于内存的源代码 if (*outbuffer == NULL || outsize == 0) {
/
Allocate initial buffer */
dest->newbuffer = *outbuffer = (unsigned char *) malloc(OUTPUT_BUF_SIZE);
if (dest->newbuffer == NULL)
ERREXIT1(cinfo, JERR_OUT_OF_MEMORY, 10);
*outsize = OUTPUT_BUF_SIZE;
}