Alocação dinâmica em C

1. Alocação dinâmica em C

Fernando
bellun

(usa Outra)

Enviado em 29/10/2015 - 07:59h

Estou tentando construir uma função em C que abra um arquivo e leia vários registros alocando dinamicamente memória, porém a função que eu fiz quando eu a executo ela faz o DEV parar de responder.

//Objetivo:Pesquisar um circuito
//Parametros:Nenhum
//Retorno:nenhum
void pesquisarCircuito()
{
int i=0;
struct Circuito *circuitos;
struct Circuito *ptr;
FILE *arqCircuitos;
system("cls");

ptr = (struct Circuito*) malloc( sizeof( struct Circuito));
if(ptr == NULL)
{
system("cls");
printf("Erro ao alocar memoria \n");
}
else
{
arqCircuitos = fopen("circuitos.dat","r");
if (arqCircuitos == NULL)
{
printf("Problemas na abertura do arquivo\n");
}
else
{
while (!feof(arqCircuitos))
{
if(fread(&ptr[i], sizeof(struct Circuito), 1, arqCircuitos) == 1)
{
i++;
}
}

fclose(arqCircuitos);
free(ptr);
}
}
printf("Cheguei aqui a salvo\n");
getch();
}



  


2. Re: Alocação dinâmica em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/10/2015 - 10:44h

Você só aloca espaço para um struct Circuito, então não deveria tentar ler muitos deles.


3. Re: Alocação dinâmica em C

Fernando
bellun

(usa Outra)

Enviado em 29/10/2015 - 11:01h

paulo1205 escreveu:

Você só aloca espaço para um struct Circuito, então não deveria tentar ler muitos deles.


Qual seria a melhor forma, tendo em vista que eu não sei a quantidade fixa de estruturas no arquivo, porque eu estou cadastrando enquanto o usuário desejar.


4. Re: Alocação dinâmica em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/10/2015 - 11:07h

bellun escreveu:

paulo1205 escreveu:

Você só aloca espaço para um struct Circuito, então não deveria tentar ler muitos deles.


Qual seria a melhor forma, tendo em vista que eu não sei a quantidade fixa de estruturas no arquivo, porque eu estou cadastrando enquanto o usuário desejar.


*A melhor* forma depende do tipo de aplicação que você tem. Você poderia usar uma lista, um array dinâmico que muda de tamanho (leia sobre realloc()), uma árvore, um hashmap...

No seu caso, o melhor é o que o professor pediu para fazer. Se ele pediu tratamento como array (ou se só ensinou a fazer desse modo), use tratamento como array com realocações sucessivas.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts