Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc

Iniciado por Gallu, 31 Octubre 2017, 21:53 PM

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

Gallu

Hola, tal y como explico en el título, inexplicablemente estoy teniendo un segmentacion fault al intentar liberar memoria de un puntero previamente creado con malloc, agradezco cualquier aporte, os pego la función, ojo, el error ocurre SOLO cuando paso por segunda vez por dentro de la función, la primera vez funciona sin problema.



void cleanScrean(){
    #ifdef WINDOWS
             system("CLS");
          #elif defined UNIX
             system("clear");
          #endif
}

void cleanBuffer(){
int ch;
while ((ch = getchar()) != '\n' && ch != EOF)
    ;
}

Viajero*  crearViajero(){
Viajero * viajero = (Viajero *) malloc(sizeof(Viajero));

cleanScrean();

char * nombreTemp = (char *) malloc(sizeof(char) * 255);
printf("Nombre del viajero.\n");
cleanBuffer();

fgets(nombreTemp, 255 , stdin);
viajero->nombre = (char *) malloc(sizeof(strlen(nombreTemp)));
strncpy(viajero->nombre, nombreTemp , strlen(nombreTemp)); 

printf("Apellido del viajero.\n");

fgets(nombreTemp, 255 , stdin);
viajero->apellido = (char *) malloc(sizeof(strlen(nombreTemp)));
strncpy(viajero->apellido, nombreTemp , strlen(nombreTemp)); 

free(nombreTemp);

return viajero;
}
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.

CalgaryCorpus

malloc(sizeof(strlen(x)))

No tiene sentido.

Usa

malloc(1+strlen(x))

Que pide memoria por el tamaño en bytes del string x


Otra cosa que note, pero que no es un problema, realmente, aunque es bueno saberlo es que sizeof(char) es siempre 1, no es necesario incluirlo.

Aqui mi perfil en LinkedIn, invitame un cafe aqui

Gallu

Hola, gracias por el aporte, aunque no me soluciona el problema, continúa lanzando el mismo error, nadie se ha topado con esto?

Saludos
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.