Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gallu en 31 Octubre 2017, 21:53 pm



Título: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
Publicado por: Gallu en 31 Octubre 2017, 21:53 pm
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.

Código
  1.  
  2. void cleanScrean(){
  3.    #ifdef WINDOWS
  4.             system("CLS");
  5.          #elif defined UNIX
  6.             system("clear");
  7.          #endif
  8. }
  9.  
  10. void cleanBuffer(){
  11. int ch;
  12. while ((ch = getchar()) != '\n' && ch != EOF)
  13.    ;
  14. }
  15.  
  16. Viajero*  crearViajero(){
  17. Viajero * viajero = (Viajero *) malloc(sizeof(Viajero));
  18.  
  19. cleanScrean();
  20.  
  21. char * nombreTemp = (char *) malloc(sizeof(char) * 255);
  22. printf("Nombre del viajero.\n");
  23. cleanBuffer();
  24.  
  25. fgets(nombreTemp, 255 , stdin);
  26. viajero->nombre = (char *) malloc(sizeof(strlen(nombreTemp)));
  27. strncpy(viajero->nombre, nombreTemp , strlen(nombreTemp));  
  28.  
  29. printf("Apellido del viajero.\n");
  30.  
  31. fgets(nombreTemp, 255 , stdin);
  32. viajero->apellido = (char *) malloc(sizeof(strlen(nombreTemp)));
  33. strncpy(viajero->apellido, nombreTemp , strlen(nombreTemp));  
  34.  
  35. free(nombreTemp);
  36.  
  37. return viajero;
  38. }
  39.  


Título: Re: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
Publicado por: CalgaryCorpus en 1 Noviembre 2017, 04:33 am
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.



Título: Re: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
Publicado por: Gallu en 1 Noviembre 2017, 20:21 pm
Hola, gracias por el aporte, aunque no me soluciona el problema, continúa lanzando el mismo error, nadie se ha topado con esto?

Saludos