Hello!

I need your help for a problem. I have to save an image file - it is a bmp 24-bit file.
I wrote some code but when I try to execute I get the message
"12 [main] bmpengine 2532 _gygtls:handle_exceptions: Error while dumping state (probably corrupted stack) Segmentation fault (core dumped)"

Notes:
1) "bmpengine" is my executable
2) the structures are:
Code:
typedef struct image
{
    BITMAP_FILE_HEADER file_info;
    BITMAP_INFO_HEADER bitmap_info;
    byte *data;
} IMAGE;

and

// BMP File header
typedef struct bitmap_file_header {
    byte bfType[2];    
    dword bfSize;
    word bfReserved1;    
    word bfReserved2;
    dword bfOffBits;
} BITMAP_FILE_HEADER;

// BMP Image header
typedef struct bitmap_info_header {
    dword biSize;
    dword biWidth;
    dword biHeight;
    word biPlanes;                   
    word biBitCount;
    dword biCompression;       
    dword biSizeImage;
    dword biXPelsPerMeter;     
    dword biYPelsPerMeter;
    dword biClrUsed;               
    dword biClrImportant;
} BITMAP_INFO_HEADER;
my "save" code is:
Code:
int save_image(IMAGE *image, char name[])
{
	FILE *fp;
	int i, rowsize;
	byte temp;
	unsigned int row, col, colour;

	fp=fopen(name, "wb");
	if(fp==NULL)
	{
		printf("cannot open the file %s\n", name);
		return EXIT_FAILURE;
	}

	/* I dont know if i really need those - it does not work with or without them

        image->file_info.bfReserved1=0;
	image->file_info.bfReserved2=0;
	image->file_info.bfOffBits=54;
	image->bitmap_info.biBitCount=24;
	image->bitmap_info.biCompression=0;

	image->bitmap_info.biXPelsPerMeter=0;
	image->bitmap_info.biYPelsPerMeter=0;
	image->bitmap_info.biClrUsed=3;
	image->bitmap_info.biClrImportant=0;
      */

	rowsize=4*((3*image->bitmap_info.biWidth+3)/4);
	image->bitmap_info.biSizeImage=image->bitmap_info.biHeight*rowsize;
	image->file_info.bfSize=54+image->bitmap_info.biSizeImage;

	// Reserving memory for image's data
	image->data=(byte*) malloc(sizeof(byte)*image->bitmap_info.biSizeImage);
	if (image->data==NULL)
	{
		printf("Insufficient memory to load new image.\n");
	    free(image);   return EXIT_FAILURE;
	 }

	if(image != NULL)
	{
	fwrite(&image->file_info, sizeof(BITMAP_FILE_HEADER),1,fp);
	fwrite(&image->bitmap_info, sizeof(BITMAP_INFO_HEADER),1,fp);

	for(row=image->bitmap_info.biHeight-1; row>=0; row--) {//for each row
		for(col=0;col<image->bitmap_info.biWidth;col++) //for each column
			for(colour=BLUE; colour>=RED; colour--)  //for each color
				fwrite(&image->data[row*rowsize+3*col+colour],sizeof(byte),1,fp); 				
				
	    for(i=rowsize-(3*image->bitmap_info.biWidth);i>=0;i--) //padding
	        fwrite(&temp,sizeof(temp),1,fp);
	    } //end_for
	}  //end_if

	fclose(fp);
	return EXIT_SUCCESS;
}
where i am doing wrong??? please help!
any help would be appreciated!
thanks...