title: I am unable to load a .BMP image
body: <p>I am new to opengl. I am trying to load an image using opengl. But I am unable to do so. It gives me this error:</p>
  
  <pre><code>*** Error in `./lena': double free or corruption (top) : 0x0000000001353070 ***
  </code></pre>
  
  <p>I don't know what I am doing wrong. My code has been given below. Actually it is not my code. I have seen it in another post in Stack Overflow by someone named Ollo.</p>
  
  <pre><code>#include &lt;bits/stdc++.h&gt;
  #include &lt;GL/glut.h&gt;
  
  using namespace std;
  
  struct BITMAPFILEHEADER
  {
      int bfType;  //specifies the file type
      long long bfSize;  //specifies the size in bytes of the bitmap file
      int bfReserved1;  //reserved; must be 0
      int bfReserved2;  //reserved; must be 0
      long long bOffBits;  //species the offset in bytes from the bitmapfileheader to the bitmap bits
  };
  
  struct BITMAPINFOHEADER
  {
      long long biSize;  //specifies the number of bytes required by the struct
      long long biWidth;  //specifies width in pixels
      long long biHeight;  //species height in pixels
      int biPlanes; //specifies the number of color planes, must be 1
      int biBitCount; //specifies the number of bit per pixel
      long long biCompression;//spcifies the type of compression
      long long biSizeImage;  //size of image in bytes
      long long biXPelsPerMeter;  //number of pixels per meter in x axis
      long long biYPelsPerMeter;  //number of pixels per meter in y axis
      long long biClrUsed;  //number of colors used by th ebitmap
      long long biClrImportant;  //number of colors that are important
  };
  
  int main(void){
      FILE *filePtr;
      BITMAPFILEHEADER bitmapFileHeader;
      BITMAPINFOHEADER *bitmapInfoHeader = new BITMAPINFOHEADER;
      unsigned char *bitmapImage;  //store image data
      int imageIdx=0;  //image index counter
      unsigned char tempRGB;  //our swap variable
  
      filePtr = fopen("lena.bmp","rb");
      if (filePtr == NULL)
          cout &lt;&lt; "ERROR!!! 1" &lt;&lt; endl;
      fread(&amp;bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr);
  
      fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr); // small edit. forgot to add the closing bracket at sizeof
  
      //move file point to the begging of bitmap data
      fseek(filePtr, bitmapFileHeader.bOffBits, SEEK_SET);
  
      //allocate enough memory for the bitmap image data
      bitmapImage = (unsigned char*)malloc(bitmapInfoHeader-&gt;biSizeImage);
  
      //verify memory allocation
      if (!bitmapImage)
      {
          free(bitmapImage);
          fclose(filePtr);
      }
  
      //read in the bitmap image data
      fread(bitmapImage, bitmapInfoHeader-&gt;biSizeImage, 1, filePtr);
  
      //make sure bitmap image data was read
      if (bitmapImage == NULL)
      {
          fclose(filePtr);
      }
  
      //swap the r and b values to get RGB (bitmap is BGR)
      for (imageIdx = 0;imageIdx &lt; bitmapInfoHeader-&gt;biSizeImage;imageIdx+=3)
      {
          tempRGB = bitmapImage[imageIdx];
          bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
          bitmapImage[imageIdx + 2] = tempRGB;
      }
  
      return 0;
  }
  </code></pre>