Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: do-while en 22 Noviembre 2010, 07:08 am



Título: ¿Por que razones no se asigna memoria?
Publicado por: do-while en 22 Noviembre 2010, 07:08 am
¡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!


Título: Re: ¿Por que razones no se asigna memoria?
Publicado por: Eternal Idol en 22 Noviembre 2010, 10:55 am
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


Título: Re: ¿Por que razones no se asigna memoria?
Publicado por: do-while en 24 Noviembre 2010, 00:21 am
¡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!