Toma en cuenta que hay que buscar incluso en los índices de punteros inválidos; ya que dices que para insertar un registro nuevo, el puntero inválido aún debe apuntar al espacio libre.
Por una parte me has demostrado que has entendido perfectamente el funcionamiento de la librería. Por otro lado... ¡Houston! ¡Tenemos un problema! Habrá que buscar una solución razonable, aunque tal vez suponga un cambio profundo en algún planteamiento.
PD: ahora que lo pienso, si en la operación de sobreescribir un registro no puedes permitir que hayan dos "iguales" (por definición), ¿será que en la operación de inserción tampoco?
Por supuesto; entendiendo dos registros iguales los que sean así considerados por la función de comparación. Visto como base de datos, que tengan misma clave primaria. De hecho la operación de inserción es donde primero verificaba ese punto. Con las modificaciones, la primera opción fue que si alteraba el índice, devolvería error; pero después pensé que entonces rectificar un registro afectando algún campo de la clave requeriría eliminarlo y volver a crearlo, así que opté por permitir dicha modificación comprobando primero la no duplicidad.
Gracias por tu atención, Lucario. Respecto del bug que has descubierto, si tienes alguna idea, será muy tenida en cuenta.
Saludos.