viciado 1 Denunciar post Postado Setembro 18, 2009 Estou com algumas dúvidas no código: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct sPessoa{ int idade; char nome[20+1]; struct sPessoa *prox; }PESSOA; typedef PESSOA* FILA; void inic(FILA* fila){ *fila = NULL; } void inserir(FILA* fila, int idade, char *nome){ if(*fila==NULL){ *fila = (FILA) malloc(sizeof(PESSOA)); //O q faz aqui ?? if(*fila==NULL) return; (*fila)->idade = idade; strcpy((*fila)->nome,nome); (*fila)->prox = NULL; } else inserir(& (*fila)->prox, idade, nome); } void apagar(FILA *fila){ PESSOA *tmp = *fila; if(*fila == NULL) return; *fila = (*fila)->prox; free(tmp); //Pq a variavel tmp ? } void listar(FILA fila){ if(fila==NULL) return; printf("%d %s \n",fila->idade, fila->nome); listar(fila->prox); } int main() { FILA f; inic(&f); puts("Iniciar:"); listar(f); puts("Inserir:"); inserir(&f,10,"Tiago"); inserir(&f,20,"Luisa"); inserir(&f,30,"Ana"); puts("Listar 3"); listar(f); apagar(&f); puts("Listar 2"); listar(f); apagar(&f); puts("Listar 1"); listar(f); apagar(&f); puts("Listar nada"); listar(f); apagar(&f); puts("Listar nada"); listar(f); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Setembro 18, 2009 bom a primeira é alocação dinamica você ainda n sabe sobre o assunto?? e sobre o tmp tbm n vi utilidade dele no codigo do jeito q esta; []s Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 18, 2009 void apagar(FILA *fila){ PESSOA *tmp = *fila; if(*fila == NULL) return; *fila = (*fila)->prox; free(tmp); //Pq a variavel tmp ? } Sem a variável "tmp" a memória de "*fila" não é libearada. Note que "*fila" passa a possuir o endereço de outro nó. A variável "tmp" guarda a posição que deve ser liberada da memória. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Setembro 19, 2009 Ok. Obrigado Na função void inserir(FILA* fila, int idade, char *nome){ if(*fila==NULL){ *fila = (FILA) malloc(sizeof(PESSOA)); if(*fila==NULL) return; //O q faz esse if ??? (*fila)->idade = idade; strcpy((*fila)->nome,nome); (*fila)->prox = NULL; } else inserir(& (*fila)->prox, idade, nome); } Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Setembro 19, 2009 malloc returna NULL no caso de falha na alocação da memória. Seria interessante mudar o código para exibir alguma mensagem, indicando que houve um erro! void inserir(FILA* fila, int idade, char *nome){ if(*fila==NULL){ *fila = (FILA) malloc(sizeof(PESSOA)); if(*fila==NULL) { fputs("Memory Allocation error. Aborting", stderr); exit(1); } (*fila)->idade = idade; strcpy((*fila)->nome,nome); (*fila)->prox = NULL; } else inserir(& (*fila)->prox, idade, nome); } Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Setembro 19, 2009 vlw, obrigado pela ajuda abraço Compartilhar este post Link para o post Compartilhar em outros sites