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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Fallo en segmentación inexplicable (al menos para mi)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fallo en segmentación inexplicable (al menos para mi)  (Leído 3,150 veces)
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Fallo en segmentación inexplicable (al menos para mi)
« en: 17 Julio 2010, 12:47 pm »

Hola a todos , ejecutando el siguiente programa me da un fallo en segmentación , alguien me podria decia  a que se debe ? gracias de antemano
Código
  1.  
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. typedef struct {
  8. char *nombre;
  9. char *direccion;
  10. int edad;
  11. char *dni;
  12. }type_persona;
  13.  
  14. crear_cliente(type_persona *cliente){
  15.    char aux[50];
  16.    int aux2;
  17.  
  18.        printf("%s", "\nCreando cliente......\n");
  19.        printf("\nNombre del cliente :");
  20.        fgets(aux,50,stdin);
  21.        cliente->nombre = (char*) malloc(strlen(aux) * sizeof(char));
  22.        strcpy(cliente->nombre , aux);
  23.        memset(aux,' ',50);
  24.  
  25.        printf("\nDirección del Cliente:");
  26.        fgets(aux,50,stdin);
  27.        cliente->direccion = (char*) malloc(strlen(aux)*sizeof(char*));
  28.        strcpy(cliente->direccion , aux);
  29.        memset(aux,' ',50);
  30.  
  31.        printf("\nDNI del Cliente:");
  32.        fgets(aux,50,stdin);
  33.        cliente->dni =(char*) malloc(strlen(aux)*sizeof(char*));
  34.        strcpy(cliente->dni , aux);
  35.  
  36.        printf("\nEdad del Cliente:");
  37.        scanf("%d", &(cliente->edad));
  38.        printf("\nsu edad es %d", cliente->edad);
  39.  
  40.        printf("\n Cliente creado !!!!");
  41.  
  42. }
  43.  
  44. int main(){
  45.    type_persona *cliente;
  46.  
  47.    crear_cliente(cliente);
  48.  
  49.    printf("\n%s %s %s", cliente->dni , cliente->nombre , cliente->direccion );
  50.  
  51.    return 0;
  52.  
  53. }
  54.  


« Última modificación: 17 Julio 2010, 13:09 pm por Didacso » 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.
Og.


Desconectado Desconectado

Mensajes: 822


Aprendiendo de la vida


Ver Perfil
Re: Fallo en segmentación inexplicable (al menos para mi)
« Respuesta #1 en: 17 Julio 2010, 15:31 pm »

Código
  1. crear_cliente(type_persona *cliente)
no tiene tipo de retorno.

deberia ser:
Código
  1. void crear_cliente(type_persona *cliente)

y al compilar en gcc no me da ningún Fallo de segmentación. Que compilador usas?


En línea

|-
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Fallo en segmentación inexplicable (al menos para mi)
« Respuesta #2 en: 17 Julio 2010, 15:33 pm »

El fallo de segmentación luego de la muestra se debe a que no reservas el espacio en memoria para el puntero a la estructura, prueba añadiendo:


Código
  1.    cliente = (type_persona*)(malloc(sizeof(type_persona)));
En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Fallo en segmentación inexplicable (al menos para mi)
« Respuesta #3 en: 17 Julio 2010, 21:10 pm »

Gracias por vuestras respuestas ...

Código
  1. crear_cliente(type_persona *cliente)
no tiene tipo de retorno.

deberia ser:
Código
  1. void crear_cliente(type_persona *cliente)

y al compilar en gcc no me da ningún Fallo de segmentación. Que compilador usas?

uso gcc y el error era al ejecutar, no al compilar , el prototipo del método
crear cliente está en un .h , al postear el código olvide ponerlo


El fallo de segmentación luego de la muestra se debe a que no reservas el espacio en memoria para el puntero a la estructura, prueba añadiendo:


Código
  1.    cliente = (type_persona*)(malloc(sizeof(type_persona)));


si, era esto lo que estaba fallando , gracias

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.
cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Fallo en segmentación inexplicable (al menos para mi)
« Respuesta #4 en: 17 Julio 2010, 21:38 pm »

De nada  :D
En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Fallo en segmentación inexplicable (al menos para mi)
« Respuesta #5 en: 18 Julio 2010, 00:21 am »

Didacso, algunos consejos...

> Utiliza strncpy() en vez de strcpy()

https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

> Nunca haces uso de la variable int aux2;

> Tanto Didacso como cbug, no hace falta castear malloc() ya que esta devuelve un void*

> En dni y direccion es sizeof( char ); no sizeof( char* );

> Te falta asignar espacio para el caracter finalizador de cadena '\0'

Código:
cliente->dni = malloc( (strlen( aux ) + 1) * sizeof( char ) );

> Acuerdate de liberar la memoria con free() para no dejar memory leaks

Salu10.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?] Fallo de segmentación - C
Programación C/C++
8789poli 3 4,641 Último mensaje 14 Diciembre 2010, 19:50 pm
por 8789poli
Mensaje ¿nucleo? fallo de segmentacion ::: Desactivando la protección
GNU/Linux
Garfield07 2 3,321 Último mensaje 1 Enero 2011, 01:03 am
por Garfield07
Fallo de segmentación al agregar mas nodos en una lista.
Programación C/C++
samur88 0 3,101 Último mensaje 19 Enero 2011, 15:08 pm
por samur88
Fallo de segmentacion con fgets y Array de cadenas. « 1 2 »
Programación C/C++
samur88 12 7,042 Último mensaje 7 Marzo 2011, 00:37 am
por samur88
Fallo de segmentacion
Programación C/C++
_niu 9 5,448 Último mensaje 29 Agosto 2011, 02:58 am
por _niu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines