Как обработать двоичный файл в с++?
Проблема в том что в режиме "a+" запись всегда происходит в конец файла. 
Цитата из man fopen:a+     Open for reading and appending (writing at end of file). The file is created if it does not exist. The initial file position for reading is at the beginning of the file, but output is always appended to the end of the file. 
Вопрос по теме на SO:
stackoverflow.com/questions/3645123/opening-a-file...
Стандартные средства языка С не предоставляют возможности писать в  произвольное место в файле. Вам нужно изменить алгоритм, либо пользоваться ками-то более низкоуровневыми и платформо специфичными средствами.
Для того, чтобы изменять файл в произвольном месте без уничтожения содержимого, нужно применять режим "r+" при открытии