Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jhonny Eflainy Silva

Função Free - Alocação Dinamica de memoria

Recommended Posts

Pessoal não consigo implementar a função free nesse codigo!

o enunciado diz o seguinte.

 

1. Fazer um programa em Linguagem C que crie uma estrutura de dados voo (struct voo) para a empresa VOEBEM, que servirá para implementar funções para controle da lista dos voos. A estrutura voo deve ser implementada de forma dinâmica e deve conter os seguintes dados: número do voo; data do voo; horário do voo; aeroporto de Saída; aeroporto de Chegada; rota; tempo estimado de voo; passageiros a bordo;

2. Implementar a função cadastrarVoo() que deve permitir o cadastro de um novo voo;

3. Implementar a função consultaVoo() que deve permitir obter as informações do voo com base na digitação do número do voo;

4. Implementar a função removeVoo() que permita a exclusão de um determinado voo.

--------------------------------------------------------------------------

 

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

struct voo
{
int numvoo;
int datavoo;
int horario;
char saida[40];
char chegada[40];
char rota[60];
int passabordo;
};

void menu();
void consultar();
void cadastro();
void selecao();
void remover();
struct voo *inf;

main()
{
menu();
return 0;
system("pause");

}
void menu()
{
printf("\n Empresa VOEBEM \n");
printf(" ============================ \n\n");
printf(" ____________________________\n");
printf("| Escolha uma opcao abaixo |\n");
printf("|----------------------------|\n");
printf("| 1 - Cadastrar Passagem |\n");
printf("| 2 - Consultar Passagem |\n");
printf("| 3 - Remover |\n");
printf("| 0 - Sair |\n");
printf("|____________________________|\n");
selecao();
}

void selecao(){
int opcao;

printf("\nDigite uma das opcoes: ");
scanf("%i", &opcao);

switch (opcao){
case 1:
cadastro();

menu();
break;

case 2:
consultar();

menu();
break;

case 3:
remover();

menu();
break;

case 0:
system("pause");
exit(0);
break;

default:
printf("\n\nOpcao nao encontrada.\nTente Novamente\n\n");
system("pause");
system("cls");
menu();

break;
}
}

//FUNÇÃO CADASTRAR
void cadastro(){
int num;
do{
inf = (struct voo *) malloc(sizeof(struct voo));

printf("\n\n*****CADASTRO DE VOO*****\n");

printf("\nNumero do voo: ");
scanf("%d", &inf->numvoo);
fflush(stdin);

printf("\nData do voo: ");
scanf("%d", &inf->datavoo);

printf("\nHorario do voo: ");
scanf("%d", &inf->horario);

printf("\nAeroporto de saida: ");
fflush(stdin);
gets(inf->saida);

printf("\nAeroporto de chegada: ");
fflush(stdin);
gets(inf->chegada);

printf("\nRota do voo: ");
fflush(stdin);
gets(inf->rota);

printf("\nPassageiros a bordo: ");
fflush(stdin);
scanf("%d", &inf->passabordo);

printf(" ___________________________________\n");
printf("| Escolha uma opcao abaixo |\n");
printf("|-----------------------------------|\n");
printf("| 1 - Cadastrar outra Passagem |\n");
printf("| 0 - Voltar ao menu |\n");
printf("|___________________________________|\n");

printf("Opcao: ");
scanf("%d",&num);
}while(num!=0);
system("cls");
}

void remover(){
free(*inf);
break;
menu();
}

//FUNÇÃO CONSULTAR
void consultar(){

system("cls");
int consult;
printf("Digite o numero do voo: ");
scanf("%d", &consult);

if(inf->numvoo!=consult){
printf("Numero nao encontrado\n");
printf("Tente Novamente");
getch();
system("cls");
consultar();
}else{
printf("\n-----------------------------");
printf("\nNumero do voo encontrado");
printf("\nNumero do Voo: %d ", inf->numvoo);
printf("\n\nData do voo: %d ", inf->datavoo);
printf("\nHorario do voo: %d", inf->horario);
printf("\nAeroporto de saida: %s ", &inf->saida);
printf("\nAeroporto de chegada: %s", &inf->chegada);
printf("\nRota: %s", &inf->rota);
printf("\nPassageiros a bordo: %d", inf->passabordo);
getch();
system("cls");
menu();

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguns conselhos iniciais:

 

1. Determine o tipo de retorno de main: int;

2. Não inclua código que nunca será executado (exemplo do seu programa: system("pause"););

3. Não forneça stdin como argumento para fflush;

4. Verifique os valores retornados por funções como scanf, para determinar se houve problema em suas execuções.

 

 

Qual sua pergunta sobre C?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguns conselhos iniciais:

 

1. Determine o tipo de retorno de main: int;

2. Não inclua código que nunca será executado (exemplo do seu programa: system("pause"););

3. Não forneça stdin como argumento para fflush;

4. Verifique os valores retornados por funções como scanf, para determinar se houve problema em suas execuções.

 

 

Qual sua pergunta sobre C?

 

Minha pergunta é como eu implemento a função remover

(free) nesse codigo. agradeço as dicas mais mesmo assim

não concigo implementar pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está passando o valor da variável inf para free quando deveria fornecer o endereço para o qual está aponta.

 

//...
free(*inf); // Errado, este (*) operador só é usado quando se quer os dados do endereço, ou seja, para os quais a variável aponta.
//_
free(inf); // Certo, pois fornece o endereço
//...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.