Problemas con la reserva dinámica de memoria

Cuestiones y dudas acerca de lenguajes de programación diversos.

Moderador: Moderadores

Avatar de Usuario
Jose P.

Problemas con la reserva dinámica de memoria

Mensaje por Jose P. » Mié Ene 12, 2005 6:33 pm

Hola a todos.

Están ocurriéndome problemas aparentemente sin fundamento con la gestión de memoria dinámica al programar en c++, y es frustrante, porque el código parece estar correcto y yo estoy desperdiciando horas y horas en revisarlo, cuando debería estar haciendo otras cosas.

Esto me ocurre con el compilador g++3-3 de linux, aunque también con otras versiones más antiguas en otro ordenador.

Por esquematizar, mi problema es el siguiente:

1-Reservo memoria dinámica para una matriz M de 2x2.
2.- Entro en un bucle de n iteraciones;
3.- En cada iteración Llamo a una función que modifica el valor de los elementos .

Cuando vuelvo al inicio del bucle, la matriz ya no está reservada y da violación de segmento al intentar accederla.

Resolví este problema haciendo que la memoria dinámica se reservara dentro de la función, ya que no necesitaba conservar el valor de los elementos de M. Así, terminó este problema, pero empezó otro aún más inexplicable:

1.- En un vector v (dinámico) de enteros meto x elementos.
2.- Llamo a la función anterior que modifica la matriz M (reservando memoria dentro). Esta función NO tiene al vector v como argumento.
3.- El valor de los elementos de v ha cambiado a un entero muy alto.

Como veréis es muy extraño, pero estoy harto de darle vueltas al código y lo único que se me ocurre es que haya problemas con la gestión de memoria de linux, pero he compilado y ejecutado en otro pc con otra versión del kernel de linux y ocurre igual.

Si alguien me ayuda lo agradeceré. Chao.

nachito79
Junior
Mensajes: 15
Registrado: Vie Dic 31, 2004 5:15 am

Mensaje por nachito79 » Lun Ene 17, 2005 1:11 am

mira, creo que tu problema se debe al tiempo de vida del vector y al intentar modificar el vector que no es pasado como parametro. El tiempo de vida de una variable (cualquiera sea su tipo) esta asociado a la funcion donde se declara, en pocas palabras, nace y muere cuando se ejecuta dicha funcion. Declarando globalmente estas variables se solventan muchos problemas. y fijate que lo que mandes o asignas sea el contenido de la direccion de memoria (esa podria ser la respuesta al numero tan alto). Espero que esto te sirva de algo. Cualquier comentario escribime a ignacioja@hotmail.com

Responder