¿Por que razones no se asigna memoria?

Iniciado por do-while, 22 Noviembre 2010, 07:08 AM

0 Miembros y 1 Visitante están viendo este tema.

do-while

¡Buenas!

Estoy trabajando con memoria dinamica bajo Windows 7 con 4 GB de RAM. Para saber si las distintas funciones encargadas de manejarla realizan bien su trabajo estoy utilizando mensajes en forma de unsigned long. Si trabajo con fragmentos pequeños de memoria, la insercion de informacion en un punto de la memoria, el reemplazo de un fragmento por otro o la extension de un fragmento con otro funcionan bien.

El problema esta al pasar de 112 bytes. En ese momento toda operacion que conlleve el aumento de la memoria me devuelve el mensaje de que la asignacion no ha podido ser posible.

Anteriormente habia realizado un trabajo parecido bajo Windows 98 y XP y nunca me habia encontrado con este problema. Aunque tambien es verdad que he cambiado el enfoque del codigo. Ahora en lugar de que cada funcion actue sobre la memoria directamente he creado un conjunto de funciones que realizan acciones sobre la memoria y el resto de funciones utilizan estas ultimas.

¿Porque con pequeños fragmentos de memoria no tengo problema, pero cuando pasado un limite comienzan los problemas?

Dejar codigo resultaria casi imposible, porque son unos cuantos ficheros, un par con unas 450 lineas de codigo (o algo mas), con llamadas a funciones entre ellos.

Simplemente queria saber si sabiais la razon de que suceda lo descrito.

¡Saludos!

PD: No se si sera de importancia o no. Una funcion no implica una sola asignacion de memoria. En una sola llamada a las funciones que la manipulan puede haber dos o tres sentencias relacionadas con la asignacion dinamica de memoria. Lo digo por si el hecho de que se ejecuten en tan poco periodo de tiempo puede influir... Hasta ahi no llego...

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Eternal Idol

112 bytes no es nada, tal vez estes corrompiendo el heap, usa el Application Verifier (con WinDbg) para tratar de comprobarlo:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&displaylang=en
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

do-while

¡Hey Eternal!

Muchas gracias por la informacion. Descargue el programa, ahora tengo que ojearlo (aun no lo he instalado...  :silbar:).

Al final reescribi todo el codigo que manejaba la memoria y localice la funcion que daba problemas. Se trataba de un realloc. No se porque al almacenar la dimension final en una variable auxiliar (para aligerar un poco el codigo), la asignacion fallaba. Lo que hice fue eliminar la variable auxiliar y asignar la memoria a partir de la expresion que calculaba la dimension final. El error desaparecio, y ya puedo asignar "toda la memoria que quiera". Lo que nunca llegare a saber, es porque siendo las dos formas equivalente, la una funcionaba y la otra no... (misterios de la vida...)

¡Un saludo y muchas gracias de nuevo!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!