Entiendo que estás trabajando en linux, por lo que ahora mismo, que estoy en windows, no puedo ayudarte mucho.
Sin embargo:
No se si te estás dando cuenta, pero ahí arriba estás cargándote el puntero a la memoria compartida. Ahí "memoria" va a apuntar a la región de la memoria dada por 'a', es decir, a 0x01100001 (el carácter 'a' en binario)
Después llamas a
y claro, estás haciendo un detach usando un puntero que no apunta a la memoria compartida.
Imagino que tu problema estará aquí, pero no puedo probarlo.
Un saludo.