15-01-2013, 12:57
Hola, bueno, el tema es que yo mando una lista a una funcion (la lista es circular) y lo que deberia hacer es imprimir un puntero aleatorio y luego borrarlo y continuar recorriendo la lista hasta terminar de borrarla. El problema es el siguiente: Me imprime y me libera la memoria del puntero bien HASTA que llega al anteultimo, ahi se cuelga y me tira el mapa de la memoria y corta el programa, se que el error pasa cuando me quedan 2 punteros por liberar porque lo debugue. Pero no se porque me tira este error. Dejo el codigo de la funcion que recibe el puntero a la lista y lo va recorriendo y borrando:
Aclaracion antes, esta es mi estructura:
struct info
{
char lineas[MAX];
struct info *siguiente;
};
Aclaracion antes, esta es mi estructura:
struct info
{
char lineas[MAX];
struct info *siguiente;
};
void imprimir(struct info *primero)
{
int i = 0, cantidad= 0, salida = 0;
struct info *siguiente = NULL, *anterior = NULL;
while(salida == 0)
{
cantidad = 1 + (rand()%100); //devuelve un random de 1 a 100
i=0;
while(i != cantidad)//RECORRO HASTA EL PUNTO D¡ELEGIDO POR RAND
{
primero = primero->siguiente;
if( (i+2) == cantidad)//Significa que llego al ultimo y guardo el anteriro al ultimo
anterior = primero;
i++;
}
printf("\n\t\t\t----BORRANDO-----\n%s\n", primero->lineas);
siguiente = primero->siguiente;
free(primero); //*********SE CUELGA ACA CUANDO FALTAN 2 PUNTEROS***********
primero = siguiente;//AL LIBERAR PONGO AL SIGUIENTE COMO EL QUE CONTINUA EN LA LISTA
anterior->siguiente = primero;
if(primero->siguiente == primero)//SI ES EL ULTIMO LO IMPRIMO, LIBERO MEMORIA Y SALGO SETEANDO SALIDA EN 1
{
printf("\n\t\t\t----BORRANDO-----\n%s\n", primero->lineas);
free(primero);
salida = 1;
}
}
}