Pregunta: | 58228 - RESERVAR MEMORIA EN TURBO C++ |
Autor: | Pajaro Osella |
tengo un problema programando en turbo c++. tengo las siguientes lineas:
unsigned char *memoria; .. .. .. memoria=(unsigned char *)malloc(65536) if(!memoria){ printf("No se puedo reservar tanta memoria"); getch(); exit(1); } lo q estoy intentando hacer es reservar un bloque de 64 kb de memoria, pero cuando lo ejecuto el programa, memomira me devuelve NULL debido a q no pudo reservarse tanta memoria. por que pasa esto!??!?!? supongo que el error debe estar en la configuracion del compilador. estoy trabajando con un modelo de programa standard y 64 kb de heap. por favor si alguien puede ayudarme se lo agradeceria eternamente! |
Respuesta: | Francisco Rogles |
Supongo que se trata de una version para DOS. Si es asi, el problema es que, con un heap de 64 Kb, no puedes reservar un bloque de 64 Kb de memoria, ya que estarias intentando coger todo el heap. Ademas, probablemente el argumento para malloc (el numero de bytes que quieres reservar) sea un numero entero de 16 bits, el cual puede tomar valores de 0 a 65535. Si utilizas 65536, has provovado un desbordamiento de entero, con lo cual te ha cogido el valor cero y, logicamente, al intentar reservar 0 bytes te devuelve NULL.
Te sugiero las siguientes comprobaciones: 1. Utiliza el modelo HUGE de memoria. Este modelo permite reservar bloques de memoria de mas de 64 Kb (pero el tamaño de cada elemento debe ser una potencia de 2). 2. No recuerdo si era Turbo C o Microsoft C, uno de ellos (o los dos, hace mucho que no trabajo con DOS) tenian funciones especiales para manejar la memoria en bloques grandes. Comprueba en la ayuda de tu compilador si tienes una funcion llamada halloc, o xalloc (o algo parecido). Si es asi, probablemente podras saltarte los puntos restantes. 3. Comprueba el tamaño del tipo (unsigned int) de tu compilador. Utiliza el operador sizeof(int). Para Turbo C++, probablemente sera 2 bytes (16 bits). 4. Si el tamaño del tipo int de tu compilador es de 2 bytes (16 bits), para reservar bloques de mas de 64 Kb no podras utilizar la funcion malloc. Utiliza en su lugar la funcion calloc, su prototipo es void *calloc(int num_elementos, int tamano_elemento); Te reserva espacio para num_elementos, cada uno de tamano_elemento (ademas, todos iniciados a cero). Recuerda que, con el modelo HUGE y si el bloque resultante es de mas de 64 Kb, tamano_elemento debe ser una potencia de 2 (2, 4, 8, 16, etc). Espero que te sirva de ayuda. Saludos, PACO |
Respuesta: | miguel bedolla |
intenta con:
unsigned *char memoria=new char[8192] ' Es el equivalente en bits o intenta esto typedef *char string; string *memoria= new string de esta manera declaras una variable string y no tienes limite de caracteres |