Aveces errores a distancia se manifiestas en zanas de código que no deberían y eso es porque la ejecusión en windows no es lineal l las fugas de memoria tienen efectos tardíos. Vigila lo que hace tu función
Mensaje y eventos que puedan estar saltando y que usen mal algún puntero.
Sobre el fragmento con el delete:
Código:
switch (nListView)
{
case 0:
delete fSelRec;
Mensaje(3, "No seleccionó ningún recibo.", "Volver");
Button2Click(NULL);
return;
Button2Click(NULL) no sabemos que hace, ni lo que hace Mensaje, ni si tras la destrucción y desde otra zona del código, vuelves a entrar con fSelRec ya destruido...
Saludos.