Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Info I] Problema con funcion free
Autor Mensaje
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 450 en 19 posts
Registro en: Sep 2012
Mensaje: #1
[Info I] Problema con funcion free Dudas y recomendaciones Informática I (Electrónica)
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;
}

}
}



[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
15-01-2013 12:57
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 450 en 19 posts
Registro en: Sep 2012
Mensaje: #2
RE: [Info I] Problema con funcion free
NOTA: Ya lo pude solucionar!

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
15-01-2013 16:48
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 posts
Registro en: May 2008
Mensaje: #3
RE: [Info I] Problema con funcion free
Comenta como lo solucionaste !
15-01-2013 16:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nutters Sin conexión
Profesor del Modulo A
Winter is comming!
*****

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 332
Agradecimientos dados: 61
Agradecimientos: 450 en 19 posts
Registro en: Sep 2012
Mensaje: #4
RE: [Info I] Problema con funcion free
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.

[Imagen: 940c7f292a23ac2bfeb007a11ed0c.png]
15-01-2013 21:41
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)