Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sherry_XD en 4 Julio 2014, 06:56 am



Título: Problema con realloc :(
Publicado por: sherry_XD en 4 Julio 2014, 06:56 am
Hola, estoy realizando un algoritmo en el cual necesito redimencionar una variable, buscando en internet llegue a realloc, pero al ejecutar el algoritmo, luego de agregar 2 espacios nuevos a la variable me arroja el siguiente error (con otras cosas mas feas .-.):

*** glibc detected *** ./a.out: realloc(): invalid next size: 0x0902d2d8 ***

La verdad no entiendo que pasa, ojalá alguien se apiade de mi alma y me pueda explicar el error.

Algo así esta la parte donde uso realloc:

variable = (tipo_variable *)realloc( variable  ,sizeof(tipo_variable)*(nro_elementos + 1));


Título: Re: Problema con realloc :(
Publicado por: engel lex en 4 Julio 2014, 06:59 am
puede ser que estés corrompiendo la data o alterando incorrectamente la variable, puedes publicar tu código más completo? (cuando lo publiques usa las etiquetas GeSHi que está arriba de los emoticones a la derecha)


Título: Re: Problema con realloc :(
Publicado por: sherry_XD en 4 Julio 2014, 07:12 am
Código
  1. void h::insertar(nodo n){
  2. a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));
  3. cantidad++;
  4. a[cantidad] = n;
  5. return;
  6. }
  7.  

h es una clase:
Código
  1. class h{
  2. int cantidad;
  3. nodo *a;
  4. public:
  5. h();
  6. void insertar(nodo a);
  7.  
  8. };
  9.  


Título: Re: Problema con realloc :(
Publicado por: engel lex en 4 Julio 2014, 07:29 am
inicializaste cantidad y a?


modificado---------------


XD ya vi el error! XD


Código
  1. void h::insertar(nodo n){
  2. a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));
  3. cantidad++;
  4. a[cantidad] = n;
  5. return;
  6. }

haces el array de un tamaño 2 (es decir con claves 0, 1) y luego intentas meter un nodo en la posicion 2

Código
  1. void h::insertar(nodo n){
  2. a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));
  3.  
  4. a[cantidad] = n;
  5. cantidad++;
  6. return;
  7. }

eso debería solucionar el problema... recomiedno en estos casos hacer uso del debugger... ahí fue que lo vi XD


Título: Re: Problema con realloc :(
Publicado por: do-while en 4 Julio 2014, 17:38 pm
¡Buenas!

Cuando utilices realloc es recomendable utilizar un puntero auxiliar para almacenar el valor devuelto por la función. Si realloc no puede reservar la cantidad de espacio especificada devuelve NULL (y creo que deja el puntero original sin modificar, pero por si acaso mira alguna referencia como www.cplusplus.com ). Si no te devuelve NULL lo único que tienes que hacer es asignar el puntero auxiliar al original. Trabajando de esta forma te ahorrarás posibles problemas que puedan surgir en tu programa y tendrás los errores más controlados.

¡Saludos!