En primer lugar no es posible utilizar toda la memoria de vuestro sistema. El Dos trabaja en modo real, por lo que de los 16MB disponibles en vuestro sistema, solo se puede acceder al primer Megabyte. De este mega hay que descontar 384 Kb reservados para la memoria de vídeo y las extensiones del BIOS. En total nos quedan los conocidos 640 Kb de memoria convencional. La versión del Dos que usáis es capaz de utilizar parte de la memoria reservada para las extensiones del BIOS, pero como existen programas cargados en la memoria el total libre será aproximadamente (depende del número de aplicaciones y controladores instalados) de unos 615 Kb. Vuestro programa también consume memoria y si lo ejecutáis desde el compilador, este también consumirá. A fin de cuentas, cualquier intento de reservar más de unos 256 Kb será infructuoso. Ahora bien, los compiladores para Dos distinguen dos bloques dentro de la memoria convencional. Estos son los llamados montón cercano y montón lejano. El montón cercano es el de nuestro propio segmento, por lo que tiene un total de 64 Kb, del que se debe descontar el espacio ocupado por gran parte de las variables que son guardadas en él. Cuando intentáis alojar un bloque de memoria de la siguiente forma: char *a; a=new char[1000]; En realidad estáis cogiendo memoria del montón cercano, por lo que cualquier intento de alojar más de 64 Kb, será imposible. Incluso, dependiendo del número de variables en vuestro programa, el Sistema Operativo se negará a alojar un bloque de 48 o menos Kb. Para conseguir alojar bloques grandes, hasta agotar toda la memoria libre, debéis obligar al compilador a que reserve memoria del montón lejano. Esto se consigue utilizando el modificador 'huge' : char huge *a; a=new char huge [80000L]; Esto reserva memoria del montón lejano. Con este sistema puedes alojar bloques bastante grandes. El modelo de memoria puede ser cualquiera, excepto el más pequeño ('tiny'). No olvidéis comprobar si se pudo asignar el bloque, o estaréis escribiendo sobre datos del BIOS, S.O. , etc. (o sea, lo que os está pasando) : main(void) { int huge *memoria; memoria = new int huge [60000L]; if(memoria==NULL)  // Comprobar si tuvo éxito la asignación {   cout << "Error en la asignación";   exit(1); } else cout << "Asignados 60.000 enteros correctamente."; delete [] memoria; return 0; } Si con la memoria convencional no tenéis suficiente y necesitáis usar más, no tenéis más remedio que utilizar la memoria XMS o EMS. Con ella podeis usar los 16 Mb de vuestro sistema. Los compiladores para Dos no dan soporte para el uso de esta memoria ( a menos que permitan programas en modo protegido) por lo que debemos crear nuestras propias funciones para su uso. Es necesario utilizar las funciones de interrupción que los controladores 'Himem' y 'Emm386' , o equivalentes, instalan en nuestro sistema. Es excesivamente largo para explicarlo aquí, pero podéis encontrar las especificaciones sobre XMS y EMS fácilmente en Internet. Un saludo, Endos.