2016-06-27 5 views
1

Я использую jpeglib для сжатия jpeg. Как говорится в документе, мне нужно освободить буфер mem для себя. Но он разбился, когда свободен (mem) после jpeg_finish_compress или jpeg_destroy_compress, заявляя, что доступ нарушен.ошибка доступа нарушается, когда свободный буфер malloced by jpeg_mem_dest

Был другой человек, у которого был тот же вопрос со мной.

У меня были ошибки? Спасибо!

/* Step 1: allocate and initialize JPEG compression object */ 
jpeg_compress_struct cinfo; 
jpeg_error_mgr jerr; 
cinfo.err = jpeg_std_error(&jerr); 
jpeg_create_compress(&cinfo); 
cinfo.input_components = 3; 
cinfo.in_color_space = JCS_RGB; 

cinfo.image_width = width; 
cinfo.image_height = height; 
unsigned char* mem = NULL; 
unsigned long memSize = 0; 
jpeg_mem_dest(&cinfo, &mem, &memSize); 

jpeg_set_defaults(&cinfo); 

jpeg_set_quality(&cinfo, quality, TRUE); 

/* Step 4: Start compressor */ 
jpeg_start_compress(&cinfo, true); 

/* pointer to JSAMPLE row[s] */ 
JSAMPROW row_pointer[1]; 

/* Step 5: while (scan lines remain to be written) */ 
/*   jpeg_write_scanlines(...); */ 
while (cinfo.next_scanline < cinfo.image_height) { 
    row_pointer[0] = &newImgData[cinfo.next_scanline * width * 3]; 
    jpeg_write_scanlines(&cinfo, row_pointer, 1); 
} 

/* Step 6: Finish compression */ 
jpeg_finish_compress(&cinfo); 
//free(newImgData); 
/* Step 7: release JPEG compression object */ 
/* This is an important step since it will release a good deal of memory. */ 
jpeg_destroy_compress(&cinfo); 

free(newImgData); 
+0

Был другой человек, у которого был тот же вопрос со мной.http: //stackoverflow.com/questions/32587235/how-to-release-buffer-created-by-libjpeg – zhjq

ответ

1

код не имеет смысла, динамически выделенный буфер в переменной называется mem, но вы пытаетесь освободить переменную newImgData.