Problemas con la reserva dinámica de memoria
Publicado: 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.
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.