Conozco ese tipo de error, de hecho en VisualFox cuando se genera en alguna aplicación o ejecutable un error cualquiera, automáticamente se guarda en un archivo (Ej.: vfp7err.log) los errores con información importante para poder determinar donde se produce el error. En mi caso lo eh encontrado en la carpeta "C:\Archivos de programa\Archivos comunes\Microsoft Shared\VFP\". A continuación te pasteo un ejemplo que a mí me ocurrió:
Fatal error: Exception code=C0000005 @ 09/20/04 09:35:10 AM. Error log file: C:\Archivos de programa\Archivos comunes\Microsoft Shared\VFP\vfp7rerr.log
Called from - frmfind.op.p2.txtdato.interactivechange line 38 {c:\seime\forms\frmfind.sct c:\seime\forms\frmfind.sct}
Called from - frminout.cmdfind.click line 13 {c:\seime\forms\frminout.sct c:\seime\forms\frminout.sct}
Called from - frmmain.toolbar01.cmdprof.click line 3 {c:\seime\forms\frmmain.sct c:\seime\forms\frmmain.sct}
Called from - digiarm line 39 {C:\SEIME\progs\digiarm.prg c:\seime\digisoft.exe}
Primero te indica el error (en este caso C0000005), la fecha y la hora en que ocurrió. Pero lo más importante es que escribe los eventos y las líneas que provocaron el error. Como se puede observar hay varios eventos tabulados, el primero (frmfind.op.p2.txtdato.interactivechange line 38) es el que indica en que línea exactamente se produjo el error, los siguientes son los eventos precedentes para llegar a esa parte del código, por lo que su interpretación es de abajo hacia arriba.
En este caso en particular, parto de un ejecutable llamado digisoft.exe, en el programa digiarm.prg indica la línea en que se inicia el procesamiento de eventos con READ EVENTS.
La siguiente indica que en el formulario frmmain.sct por medio del evento frmmain.toolbar01.cmdprof.click en la línea 3 se abre el formulario llamado frminout.sct, del cual por medio del evento frminout.cmdfind.click en la línea 13 llama al formulario frmfind.sct, y en este ultimo por medio del evento frmfind.op.p2.txtdato.interactivechange específicamente llegamos a la línea 38 en donde se produjo el error C0000005 y me saca del problema.
Siguiendo esta información, el error se producía en un proceso de búsqueda, ya que el formulario en el que estaba me servía para buscar información de artículos de inventario. El problema radicaba en el manejo de las áreas y punteros de este formulario y del formulario precedente frminout.sct. En este hacia uso de la información recolectada en el anterior y realizaba una búsqueda, accesando una tabla de la misma base de datos de la consulta del formulario frmfind.sct.
Cuando uno trabaja con archivos, es importante llevar un control en el manejo de apertura de áreas y punteros. Ya que las áreas son espacios de memoria (buffer). Mi error consistía en abrir una base de datos (OPEN DATABASE), luego una tabla con el SELECT, cerraba la tabla con él USE, pero no liberaba correctamente el buffer de la base de datos. Al realizar varias consultas, acumulaba X cantidad de buffers (las veces que se realizaba esta operación) y llegaba un momento en que el espacio de memoria de buffers era demasiado grande y es en ese momento en que se producía el error.
Solución: cambie la forma de consultar las tablas, procuro utilizar mas consultas en vez de abrir las bases de datos, y al realizar consultas liberó los punteros de las tablas involucradas por medio del USE. Por ejemplo:
SELECT *;
FROM sPath + 'data\digisoft!usuario';
WHERE (alltrim(str(usuario.codigo)) LIKE this.tag);
AND ((usuario.estatus >= nEMn);
AND (usuario.estatus =< nEMx));
ORDER BY usuario.codigo;
INTO CURSOR myresp
* Como utilicé la tabla usuario, llamo al puntero que el SELECT de la consulta
* llamó y procedo a liberarlo de la memoria con USE.
* El comando use localiza la posición de memoria del puntero y libera el espacio
* de memoria correspondiente.
SELECT usuario
USE
Es aconsejable hacer uso moderado del manejo de áreas (espacios de memoria), pues este error es causa en la mayoría de los casos por desbordamiento de pila (Stack overflow). Realmente este tipo de error se da en cualquier programa en el cual se haga uso de apertura y cierre de archivos. En la imagen adjunta está un ejemplo de este error.
Espero que toda esta historia te sirva.