title: Need help in reading JPEG file using libjpeg
body: <p>I followed the example code in the libjpeg example file, however I was not able to read the image data.  </p>
  
  <p>I have the following struct, and I created an instance of this struct.</p>
  
  <pre><code> struct ImageData {
          unsigned char *pixels;
          long  width;
          long height;
      };
  
      ImageData *imageData;
  </code></pre>
  
  <p>Below is my read_JPEG_file function:</p>
  
  <pre><code>int read_JPEG_file (char * filename)
  {
      struct jpeg_decompress_struct cinfo;
      struct my_error_mgr jerr;
  
      /* More stuff */
      FILE * infile;      /* source file */
      JSAMPARRAY buffer;      /* Output row buffer */
      int row_stride;     /* physical row width in output buffer */
  
      if ((infile = fopen(filename, "rb")) == NULL) {
          fprintf(stderr, "can't open %s\n", filename);
          return 0;
      }
  
      /* Step 1: allocate and initialize JPEG decompression object */
  
      /* We set up the normal JPEG error routines, then override error_exit. */
      cinfo.err = jpeg_std_error(&amp;jerr.pub);
      jerr.pub.error_exit = my_error_exit;
      /* Establish the setjmp return context for my_error_exit to use. */
      if (setjmp(jerr.setjmp_buffer)) {
  
          jpeg_destroy_decompress(&amp;cinfo);
          fclose(infile);
          return 0;
      }
      /* Now we can initialize the JPEG decompression object. */
      jpeg_create_decompress(&amp;cinfo);
  
      /* Step 2: specify data source (eg, a file) */
  
      jpeg_stdio_src(&amp;cinfo, infile);
  
      /* Step 3: read file parameters with jpeg_read_header() */
  
      (void) jpeg_read_header(&amp;cinfo, TRUE);
      /* Step 4: set parameters for decompression */
  
      /* In this example, we don't need to change any of the defaults set by
       * jpeg_read_header(), so we do nothing here.
       */
  
      /* Step 5: Start decompressor */
  
      (void) jpeg_start_decompress(&amp;cinfo);
  
  
      row_stride = cinfo.output_width * cinfo.output_components;
      /* Make a one-row-high sample array that will go away when done with image */
      buffer = (*cinfo.mem-&gt;alloc_sarray) ((j_common_ptr) &amp;cinfo, JPOOL_IMAGE, row_stride, 1);
  
      imageData = new ImageData;
      imageData-&gt;width = cinfo.output_width;
      imageData-&gt;height = cinfo.output_height;
  
      imageData-&gt;pixels = new unsigned char [cinfo.output_width * cinfo.output_height * cinfo.output_components];
      long counter = 0;
  
     //step 6, read the image line by line
      while (cinfo.output_scanline &lt; cinfo.output_height) {
          //IT ALWAYS crash ON THIS JPEG_READ_SCANLINES FUNCTION CALL BELOW
          (void) jpeg_read_scanlines(&amp;cinfo, (JSAMPARRAY)(imageData-&gt;pixels), 1);
          counter +=row_stride;
  
      }
         /* Step 7: Finish decompression */
  
      (void) jpeg_finish_decompress(&amp;cinfo);
      /* Step 8: Release JPEG decompression object */
  
      /* This is an important step since it will release a good deal of memory. */
      jpeg_destroy_decompress(&amp;cinfo);
  
      fclose(infile);
      /* And we're done! */
      return 1;
  }
  </code></pre>
  
  <p><strong>It always fails on this JPEG_READ_SCANLINES function</strong>, in the step 6 above.  I got an "EXC_BAD_ACCESS" signal on that line.  </p>
  
  <p>Does anyone have any idea, or have some working examples on reading .jpg file with libjpeg that you can share here? I have checked the size of my imageData->pixels, and compared it with the size of the jpeg file itself, and it has the same size. The memory for this variable has also dynamically allocated, so I know that it was not a memory problem.</p>
  
  <p>Any ideas?  </p>