Fopen segmentation error?
 free(fp);
    fclose(fp);Вот тут ошибка, сначала fclose, потом free.
Еще ошибка:
struct BMP_HEADER *header;
...
 fread(&header,sizeof(BITMAPFILEHEADER),1,fp);

header - это указатель. 8 байт (на 64-битных системах). Вы в указатель (переменную-адрес) читаете структуру BITMAPFILEHEADER, сколько бы байт оно не было. Вряд ли это то, что вы хотели сделать.

Надо выделять BMP_HEADER через malloc или на стеке (как локальную переменную, а не указатель). И передавать в fread указатель на структуру, а не адрес указателя. То же самое со второй структурой.