Problema con realloc :(

Iniciado por sherry_XD, 4 Julio 2014, 06:56 AM

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

sherry_XD

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));

engel lex

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)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

sherry_XD

#2
Código (cpp) [Seleccionar]

void h::insertar(nodo n){
a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));
cantidad++;
a[cantidad] = n;
return;
}


h es una clase:
Código (cpp) [Seleccionar]

class h{
int cantidad;
nodo *a;
public:
h();
void insertar(nodo a);

};

engel lex

#3
inicializaste cantidad y a?


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


XD ya vi el error! XD


Código (cpp) [Seleccionar]
void h::insertar(nodo n){
a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));
cantidad++;
a[cantidad] = n;
return;
}


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 (cpp) [Seleccionar]
void h::insertar(nodo n){
a= (nodo *)realloc(a,sizeof(nodo)*(cantidad + 1));

a[cantidad] = n;
cantidad++;
return;
}


eso debería solucionar el problema... recomiedno en estos casos hacer uso del debugger... ahí fue que lo vi XD
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!