La Web del Programador: Comunidad de Programadores
 
    Pregunta:  3723 - OUT OF RANGE
Autor:  Mikel Torres Beti
Actualmente estoy haciendo un programa en la que empleo gráficos y comandos para trabajar con MS-DOS.
Para trabajar con el comando "Exec" debo añadir una línea al pricipio del programa lo siguiente:
{$M 16384,0,24000} que hace referncia a {Stack size,low heap limit,higt heap limit}.
El problema me viene que si amplio la <<hight heap limit >> el comando exec ignora su contenido y no procesa lo que se le indica , como por ejemplo copiar dos ficheros a un directorio.
La solución pensaba que estaba en bajar la cantidad de << hight heap limit >> pero me he encontrado de que al emplear el comando Getmem me da el siguiente error: " Heap overflow error"

  Respuesta:  rafa garza
hola que tal, desafortunadamente pascal es demasiado ordenado para manejar la memoria y tienes que seguir ese status, lo unico que te puedo recomendar que todas las rutinas que necesites acerca de las funciones de DOS, las hagas tu, y de esa manera aparte de que ocupas menos memoria, podras manipular las acciones que se esten desarrollando, si tienes alguna duda acerca de lo que te escribo con toda confianza puedes escribirme

ok

  Respuesta:  Juan Fazzini
Antes de realizar nada, hace un trace del programa (F7) y verificá cuando ejecute la línea del exec (en el caso que "ignora su contenido") el valor de "doserror" (variable del sistema que te indica por qué no ejecutó el comando exec, te indica con un 2 si no encuentra el archivo ejecutable, 8 si no tiene memoria suficiente, etc; la tabla esta en el help).

Si es porque no encuentra el archivo ejecutable, puede ocurrir porque podes intentar utilizar un commando del sistema (como copy por ej) el cual no es un archivo ejecutable, en ese caso tenes que cargar el intérprete de comandos (command.com) para poder ejecutar la rutina.
Un ejemplo de un exec ejecutando la rutina copy:
exec(´command.com´,´/c copy file1.aaa file2.ccc´);

Si por otro lado indica que no hay memoria suficiente intenta cambiar los datos de $M (normalmente stack esta en 14000, heapmin 0 y heapmax 24000)
Para que puedas entender como funciona esto tenes que ver que tu programa esta utilizando la memoria convencional (64K como maximo) si elevamos mucho el heapmax no podras ejecutar otro programa, si lo bajas mucho no podras cargar todas las variables del tuyo (caso que te ocurre un heap overflow (o desbordamiento de memoria)).
Te recomiendo que intenetes programar los diferenes comandos directamente vos y no utilices programas externos.
Cualquier consulta enviame un mail.
Suerte!