UTNianos

Versión completa: [Info I] Problema con funcion free
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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;
};


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

}
}


NOTA: Ya lo pude solucionar!
Comenta como lo solucionaste !
jajaja perdon, no tuve en cuenta que el primer elemento de la lista (cuando arranco a generarla) lo declaro como una estructura, y no como un puntero a estructura....esto lo hago en mi programa principal, por lo que al hacer el free me tiraba cualquier verdura. Por una casualidad fue que siempre que lo testie para ver donde era el error me quedaba en el ante ultimo puntero, y por ser el ante ultimo yo pense que habia un error en el manejo de puntero->siguiente que no tenia en cuenta.
URLs de referencia