Jump to content
Ferreirinha.pt

Falha de segmentação

Recommended Posts

Ferreirinha.pt

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct sChamada
{
char *nome;
char *numero;
char tipo;
char *data;
char *hora;
} Chamada;

typedef struct sLista
{
Chamada tel;
struct sLista *seg;
} *Lista, nLista;


Chamada criachamada ()
{
char nome2 [25];
char numero2 [15];
char tipo2;
char data2 [11];
char hora2 [6];

nome2[0]=32;
//tipo2='R';
Chamada cham;
printf ("Introduza um nome \n");
fgets (nome2,25, stdin);
cham.nome = nome2;
printf ("Introduza um número \n");
fgets (numero2,15,stdin);
cham.numero=strdup(numero2);
 if (numero2[0]=='\n'&& nome2[0]=='\n')
    {cham.nome=strdup("Anónimo");}
 if (numero2[0]!='\n' && nome2[0]=='\n')
    {cham.nome=strdup(nome2);}

//while(tipo2!='E'|| tipo2!='R')
//{
printf("Introduza um tipo: E(fectuada)/R(ecebida) \n");
scanf ("%c", &tipo2);
//fgets(tipo2, 2, stdin);
//getchar();
//printf ("%c \n", tipo2);
//if (tipo2!='E'||tipo2!='R') {printf ("introduza um tipo válido\n");}
//}
cham.tipo = tipo2;
getchar();
printf ("Introduza uma data do tipo dd-mm-aaaa \n");
fgets (data2,10, stdin);
cham.data=data2;
printf("Introduza uma hora do tipo hh:ss \n");
fgets (hora2,5, stdin);
cham.hora=hora2;



return cham;
}

Lista crialista (Chamada a, Lista b)
{
Lista agenda=NULL;
agenda=(Lista)malloc(sizeof(nLista));
agenda->tel = a;
agenda->seg = b;
return agenda;
}

void verCha (Chamada a)
{
printf("%s %s %c %s %s", a.nome, a.numero, a.tipo, a.data, a.hora);
}

void ver(Lista abc)
{
verCha(abc->tel);
ver(abc->seg);
}

void main ()
{
Chamada exp;
Lista des=NULL;
exp=criachamada ();
des=crialista(exp, des);
ver(des);
}

dá erro de segmentação... se tirar o que está em comentário não consegue sair do ciclo While... Alguém me consegue explicar?

Share this post


Link to post
Share on other sites
Ferreirinha.pt

tipo2='R'

era apenas para tentar ver o que fazia mas entra em ciclo :S

Share this post


Link to post
Share on other sites
brunoais

Explica melhor o q tens e tenta descobrir exatamente aonde é que está a dar segmentation fault (usa printf's com \n ao longo do código)


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
Ferreirinha.pt

eu insiro o nome, o numero, o tipo e a data e de seguida aparece pa introduzir a hora e faz o printf apenas do numero do tipo e da data e dá falha de segmentação... não sei se me fiz entender...

Share this post


Link to post
Share on other sites
Localhost

Verifica onde é que dá segmentation fault com printf's (identifica a linha exacta) e posta a função onde isso acontece e a linha.


here since 2009

Share this post


Link to post
Share on other sites
Xpirito

Parece-me que é o problema dos && e dos ||

Experimenta asim:

if (tipo2 != 'E' && tipo2 != 'R') 
{
printf ("introduza um tipo válido\n");
}

else 
{printf("FUNCIONA\n");
}


Para perguntas idiotas, respostas estúpidas!

Share this post


Link to post
Share on other sites
bubulindo

nome2[0]=32;
//tipo2='R';
Chamada cham;

Eu posso estar errado, mas não devias definir as variáveis antes de realizares qualquer outra operação?

Outra coisa que vi, porque é que usas strdup() e não strcpy()? É que crias uma string dentro da função criaChamada(), depois crias um apontador para essa string... depois passas o apontador para fora dessa função. Mas quando voltas a usar esse apontador, ele vai apontar para algo que já não existe uma vez que a string foi criada dentro da função criaChamada.

Então, muito provavelmente, a segmentation fault aparecerá na linha

des=crialista(exp, des);

Mas eu posso (e costumo) estar completamente errado.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.