elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc  (Leído 2,362 veces)
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
« 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.  


En línea

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


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
« Respuesta #1 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.



« Última modificación: 1 Noviembre 2017, 05:45 am por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Segmentacion Fault al llamar a la funcion free con un puntero creado con malloc
« Respuesta #2 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
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines