Say your input array has 10 elements.
middle = (0 + 9) / 2 = 4 (this isn't the middle...)
then in your loop near the end you try to assign newBook through newBook but declared it as a 4 element array, so only indices 0-3 are valid
You have a few logic errors you need to fix
You're kinda losing the benefit of doing a binary search by doing all this extra work, iterating loops and copying the array repeatedly. Instead you can change the function parameters to include the low and high indices and just change these indices as you make recursive calls. You search within a single array, zero loops, constant memory.