valgrind showing invalid write of size 4 at fread and memory leaks : the load function below tries to load contents of file pointed by pointer "file" and save it's location at "content" and length in "length". The code works fine but with valgrind show error of "invalid write at fread" and several memory leaks while using realloc.
Following is the code

            


    bool load(FILE* file, BYTE** content, size_t* length) {
    // providing default values to content and length
    *content = NULL;
    *length = 0;
    
    // initializing buffer to hold file data
    int size = 512;
    BYTE* buffer = NULL;
    buffer = (BYTE*) malloc(sizeof(BYTE) * size);
    if(buffer == NULL)
        return false;
    
    // bytes_read will store bytes read at a time    
    int bytes_read = 0;
    
    // reading 512 bytes at a time and incrmenting writing location by 512
    // reading stops if less than 512 bytes read
    while((bytes_read = fread(buffer + size - 512 , 1, 512, file)) == 512)
    {
        //increasing the size of 
        size = size + 512;
        if(realloc(buffer,size) == NULL)
        {
            free(buffer);
            return false;
        }
    }
    
    // undoing final increment of 512 and increasing the size by bytes_read on last iteration
    size = size - 512 + bytes_read;
    
    // triming buffer to minimum size
    if(size > 0)
    {
        BYTE* minimal_buffer = malloc(size + 1);
        memcpy(minimal_buffer, buffer, size);
        minimal_buffer[size] = '\0';
        free(buffer);    
        *content = minimal_buffer;
        *length = size;
        return true;
    }
   
    return false;
}



