Falha de segmentação

1. Falha de segmentação

Angelo Santos
asantos38

(usa Debian)

Enviado em 14/10/2017 - 09:50h

Bom dia a todos. Estou tentando fazer um programa simples de cadastro usando ponteiros.
Quando digito o nome completo recebo a mensagem de falha de segmentação(imagem do núcleo gravada).
segue o código:

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

typedef struct{
char nome[42];
int idade;
float altura;
float notas[4];
}ALUNO;


ALUNO* getAluno();

void exibirAluno(ALUNO*);

int main(void){
ALUNO* alu;

alu = getAluno();

exibirAluno(alu);

free(alu);

return 0;
}

ALUNO* getAluno(){
ALUNO *aluno;
int i;

printf("Nome completo: ");

fgets(aluno->nome, 42, stdin);

while(getchar() != '\n');

printf("Idade: ");

scanf("%d", &aluno->idade);

while(getchar() != '\n');

printf("Altura: ");

scanf("%f", &aluno->altura);

while(getchar() != '\n');

for(i = 0; i < 4; i++){
printf("%da. Nota: ", i + 1);

scanf("%f", &aluno->notas[i]);

while(getchar() != '\n');
}

return aluno;
}

void exibirAluno(ALUNO *aluno){
int i;

system("clear");

printf("Nome completo: %s\n", aluno->nome);

printf("Idade: %d\n", aluno->idade);

printf("Altura: %5.2f\n", aluno->altura);

for(i = 0; i < 4; i++){
printf("%da.nota: %5.2f\n", i + 1, aluno->notas[i]);
}
}



  


2. Re: Falha de segmentação

vitor pinheiro david
vitorpd

(usa Ubuntu)

Enviado em 14/10/2017 - 14:11h

amigo, acho que na sua função get aluno, em vez de vc retornar ponteiro de aluno retorne o struct aluno, e obviamente troque as coisas que dependem disso, pq vc ta criando um ponteiro, mas não ta criando o tipo, como se vc tivesse criando um poteiro pra int mas n coloca o inteiro na memoria, acho que é isso.


3. Re: Falha de segmentação

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/10/2017 - 12:23h

Uma variável ponteiro é uma variável que guarda apenas um endereço, e nenhum outro dado além disso. Para guardar outro dado, você tem de providenciar espaço para o dado a ser guardado em algum outro local da memória. Depois de providenciado esse espaço, aí sim você pode fazer com que o ponteiro aponte para ele e, uma vez com o apontamento feito, pode usar a referência contida no ponteiro para chegar ao dado em questão.


4. Re: Falha de segmentação

Angelo Santos
asantos38

(usa Debian)

Enviado em 16/10/2017 - 20:00h

Humm... Vou reescrever meu código fazendo esta correção.

Obrigado!



5. Re: Falha de segmentação

???
gokernel

(usa Linux Mint)

Enviado em 17/10/2017 - 14:25h



O Paulo acima já falou ...

Seria algo para mudar assim:


ALUNO* getAluno(){
ALUNO *aluno;
int i;

printf("Nome completo: ");

aluno = malloc ... // ver sobre: malloc();

fgets(aluno->nome, 42, stdin);

// bla, bla, bla ...
...







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts