struct pixel **read_pixel_array(FILE *image, int pixel_array_offset, int width, int height) {

  struct pixel** pixel_array = malloc(height * sizeof(struct pixel*));
  
  for (int i = 0; i < height; i++) {
    struct pixel* pixie_row = malloc(width * sizeof(struct pixel));
    for (int j = 0; j + 3 < width; j+= 3) {
      struct pixel* pixie = malloc(3);
      fseek(image, pixel_array_offset + j + (width * i), SEEK_SET);
      fread(&pixie->blue, 1, 1, image);
      fseek(image, pixel_array_offset + j + (width * i) + 1, SEEK_SET);
      fread(&pixie->green, 1, 1, image);
      fseek(image, pixel_array_offset + j + (width * i) + 2, SEEK_SET);
      fread(&pixie->red, 1, 1, image);
      pixie_row[j] = *pixie;
      // printf("row %d, column %d\n", i, j);
    }
    pixel_array[i] = pixie_row;
  }

  return pixel_array;
}
Each group of 3 bytes represents a single pixel, where the bytes store the blue, green, and red colour values of the pixel, in that order.
Pixels are grouped by row.
Read in pixel array by following these instructions:
1. First, allocate space for m struct pixel * values, where m is the height of the image. Each pointer will eventually point to one row of pixel data.
2. For each pointer you just allocated, initialize it to point to heap-allocated space for an entire row of pixel data.
3. Use the given file and pixel_array_offset to initialize the actual struct pixel values. Assume that sizeof(struct pixel) == 3, which is consistent with the bitmap file format.
4. Return the address of the first struct pixel * you initialized.