My program makes one image, then has a segmentation fault.

Using GDB, I can see that the segmentation fault happens on the next iteration of the loop after creating the first jpeg. 

Looking more, I see that the segmentation fault happens in the middle of reading the next 512 byte block into the buffer (about 395 bytes in). 

It reads 512 bytes (one at a time) into this buffer 30k+ times before this, and creates the first image correctly. I think I am either getting to the end of the file, or there is something wrong with how it’s reading in.  

Here’s what I've got going on:

    //buffer to read block into from our raw file.gdb
    BYTE * buffer = malloc(sizeof(BYTE) * 512);

    while (1)
    {
        //break if at end
        if (feof(file))
        { 
            break;
        }
                
        //reads block into buffer
        for (int buffread = 0; buffread < 512; buffread++)
        {
            fread(&buffer[buffread], sizeof(BYTE), 1, file);
        }
        
        //if first part of buffer matches with signature, then make a new jpeg
        if ((buffer[0] == 0xff) && (buffer[1] == 0xd8) && (buffer[2] == 0xff) && ((buffer[3] == 0xe0) || (buffer[3] == 0xe1)))

        {

            //create new file
            new_jpeg = fopen(jpeg_name, "w");

            //check to make sure file isn't null?
            if (new_jpeg == NULL)
            {
                printf("Didn't work. file is null.");
                return 1;
            }

            //copy buffer into new file
            for (int i = 0; i < 512; i++)
            {
                fwrite(&buffer[i], sizeof(BYTE), 1, new_jpeg);

            }
            
            //read 2047 more blocks into it 
            for (int i = 0, blocks = (2047 * 512); i < blocks; i++)
            {
                fread(&buffer, sizeof(BYTE), 1, file);
                fwrite(&buffer, sizeof(BYTE), 1, new_jpeg);
            }

            //close the file
            fclose(new_jpeg);

            //update jpeg_ctr
            jpeg_ctr++;

            //make new string for next jpeg name
            sprintf(jpeg_name, "%03d.jpg", jpeg_ctr);

        }
    }


If anyone could help I would really appreciate it!