Ir ao conteúdo
  • Cadastre-se

problemas em fazer free nas estruturas de dados


lomba

Posts recomendados

Já estive dando uma olhada no vosso tópico de estruturas de dados mas não consegui resolver o meu problema. Estou fazendo um código para a escola mas pelos vistos estou liberando mal a memoria, pois quando chamo a função listar não me aparecem os dados introduzidos nas estruturas.

O código é o seguinte:

#include <stdio.h>

#include <stdlib.h>

typedef struct movel{char designacao[30],marca[20]; float potencia;}ELETRO;

struct home{char nome[20]; int tam; ELETRO *domestico;};

typedef struct home DIVISAO;

#define MAX 5

void inserir_divisao(DIVISAO *zona,int *n)

{

int i,j=0,x,y;

system("cls");

printf("\t\t\t *****Inserir divisao*****\n");

{

printf("\nQuantas divisoes pretende introduzir? ");

scanf("%d",&y);

zona =malloc(sizeof(DIVISAO)*y);

if(zona==NULL)

printf("\nProblemas na alocacao de memoria ");

else

{

do{

fflush(stdin);

printf("\nQual o nome da divisao? ");

gets(zona[j].nome);

printf("\nQuantos electrodomesticos pretende introduzir? ");

scanf("%d",&x);

zona[j].tam=x;

zona[j].domestico=malloc(sizeof(ELETRO)*x);

if(zona==NULL)

printf("\nProblemas na alocação de memoria ");

else

{

i=0;

do{

fflush(stdin);

printf("\nQual o nome do electrodomestico?\n ");

gets(zona[j].domestico.designacao);

printf("\nQual o marca do electrodomestico?\n ");

gets(zona[j].domestico.marca);

printf("\nQual a potencia do electrodomestico?\n ");

scanf("%f",&zona[j].domestico.potencia);

i++;

}while(i!=x);

}

j++;

}while(j!=y);

}

}

for(j=0;j<y;j++)

free (zona[j].domestico);

free(zona);

*n=y;//insere o valor de y no endereço apontado por *n

getch();

}

void listar_divisoes(DIVISAO *zona,int *n)

{

int i,j;

system("cls");

printf("\t\t\t *****Listar divisoes*****\n");

for(j=0;j<*n;j++)

{

printf("\n%s",(*(zona+j)).nome);

for(i=0;i<zona[j].tam;i++)

printf("\n\t%s\t%s\t%.2f ",(*(zona+j)).domestico.designacao,(*(zona+j)).domestico.marca,(*(zona+j)).domestico.potencia);

}

getch();

}

void main()

{

int z=0,*n;

DIVISAO *zona; ELETRO *domestico;

n=&z;

inserir_divisao(zona,n);

listar_divisoes(zona,n);

}

estou pensando que o erro é derivado da libertação de memoria mas não estou sabendo como.

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...