Código Delphi
[-]
...
try
FrmProductoList := TFrmProductoList.Create(application);
DModulo.reset_producto;
FrmProductoList.ShowModal;
finally
FrmProductoList.Free; (1)
end;
...
FrmProductoList.Action.Free; (2)
...
Action := caFree; (3)
Lo primero que yo haría es ejecutar paso paso la aplicación poner algun breakpoint en esos lugares y ver si "salta" el error. Así sabrás seguro la línea donde falla.
Por lo otro lado comentar estas tres líneas que he marcardo porque son las que pienso que te pueden dar problemas.
(1) Liberas el formulario manualmente con Free. Bien hasta ahí, el problema es que en la (3) utilizar caFree que indica al propietario que haga lo mismo. Por lo tanto estarás intentando liberar el formulario 2 veces. Eso es candidato a un error de "Access Violation".
En este caso en la línea (3) puedes usar un caNone o caFree.
(2) Estás liberando algo que aquí no vemos dónde se crea. Si es algo que has creado tú, bien, si no lo has creado tú de forma expresa, es posible que esté pasando lo mismo que antes; que se esté intentando liberar 2 veces. Por lo tanto si es así vuelve a ser candidato a un "Access violation".