• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dinar al-khattab

Erro de memória

5 mensagens neste tópico

Eu tenho que fazer um programa que tem de registar os dados dos empregados de uma empresa. Na parte de inserir empregado, chega aqui a este ponto e dá-me um erro de memória. Alguém me sabe dizer o que está mal

     printf("\n\nInsira o numero de BI: ");
     scanf("%d", dados[i ].BI);
     printf("\n\nInsira o seu nome");
     gets(nome);
     dados[i ] .nome=(char*)malloc((strlen(nome)+1)*sizeof(char));
     strcpy(&dados[i ].nome, nome);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim à primeira vista falta um '&' no scanf.

EDIT: isso que estás a fazer nas duas últimas linhas pode ser substituído por um 'strdup'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que não falta o & no scanf porque eu estou a gravar dados numa estrutura e isso já é um endereço de memória.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu estás a passar um inteiro (ou pelo menos devias, por causa do '%d') à função, logo é o seu valor que é colocado na stack e não o endereço.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

dados (o array) é um endereço de memória;

dados[ i ] é o conteúdo de um endereço de memória, e a menos que dados seja um array de apontadores (que neste caso não é), não é um endereço de memória;

dados[ i ].BI é um dos campos da struct dados[ i ], novamente só é um endereço de memória se estiver declarado como apontador na struct.

Resumindo, o mais provável é, como disse o Rui Carlos na 1ª resposta, teres que fazer

scanf("%d", &(dados[i ].BI));[/code]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora