Ir ao conteúdo
  • Cadastre-se

alocação dinamica de struct esse codigo ta certo ?


kira911

Posts recomendados

Desculpem-me se estou floodando a parada aqui, preciso muito saber se esse codigo que eu fiz está certo...porque fiz um teste e mesmo apos o free os dados continuam na memoria. O que fiz de errado ?


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

struct testrutura
{
int ra;
char nome[30];
char endereco[40];
char cidade[35];
char turma[10];
char estado[30];
int cep;
}*dados;

int main()
{
int i,quant;
dados=(struct testrutura*)malloc(1*sizeof(struct testrutura));
printf("Quantos cadastros serao feitos? ");
scanf("%d",&quant);
fflush(stdin);
for(i=0;i<quant;i++)
{
printf("Digite o nome ");
gets(dados[i].nome);
}
for(i=0;i<quant;i++)
{
printf("Nome %s\n",dados[i].nome);
}
free(dados);
for(i=0;i<quant;i++)
{
printf("Apos o free\n");
printf("Nome %s\n",dados[i].nome);
}

getch();
}

Link para o comentário
Compartilhar em outros sites

voce tem que declara uma variavel na funçao int amin do tipo da sua estrutura e sendo ponteiro.... use typedef qeu é mais fácil nao vai ter que difitar struc somente o nome da sua estrutura

divida seu codigo em funçoes para ficar mais legivel...

na hora que rodar o programa vai imprimir os mesmos dados quando for liberada a memoria mas se você der um debug vai ver q a memoria foi liberada..

no mais verifique ai.. qualquer duvida posta ai

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

typedef struct
{
int ra;
char nome[30];
char endereco[40];
char cidade[35];
char turma[10];
char estado[30];
int cep;
}TIPO_DADOS;

void inserir(TIPO_DADOS *x, int qtde_dados);
void libera_memoria(TIPO_DADOS *x);
void imprime_dados(TIPO_DADOS *x,int qtde_dados);


int main()
{
TIPO_DADOS *dados;
int qtde_dados;

printf("Quantos cadastros serao feitos?\t");
scanf("%d",&qtde_dados);

dados = (TIPO_DADOS *)malloc(sizeof(TIPO_DADOS) * qtde_dados);

inserir(dados,qtde_dados);
imprime_dados(dados,qtde_dados);
printf("Apos Liberar memoria\n");
libera_memoria(dados);
imprime_dados(dados,qtde_dados);


system("pause");
return 0;
}


void inserir(TIPO_DADOS *x, int qtde_dados)
{
for(int i=0;i<qtde_dados;i++)
{
system("cls");
printf("Digite o nome %d:\t",i+1);
fflush(stdin);
gets(x[i].nome);
}
}

void libera_memoria(TIPO_DADOS *x)
{
free(x);
}

void imprime_dados(TIPO_DADOS *x,int qtde_dados)
{
for(int i=0; i<qtde_dados; i++)
{
printf("Nome %d: %s\n",i+1,x[i].nome);
}
}

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!