Alocação dinamica

1. Alocação dinamica

Cristiam
Dean_Winchester

(usa Outra)

Enviado em 22/03/2014 - 23:21h

Boa Noite
estou tentando resolver um exercicio da faculdade mas nao estou conseguindo
preciso ler e armazenar num vetor numeros de um arquivo que ira disponibilizado
porem nao sei a quantidade de memoria que devo alocar. logo a solução seria ler e ir alocando
a memoria no vetor.
eu tentei fazer assim mas nao deu certo alguem tem alguma dica


while (feof (Arquivo) ==0)
{
Vetor=(int*)malloc(1*sizeof(int));
fscanf(Arquivo,"%d",Vetor);
}


  


2. Re: Alocação dinamica

???
gokernel

(usa Linux Mint)

Enviado em 23/03/2014 - 07:29h


Veja algo sobre realloc().



3. Re: Alocação dinamica

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/03/2014 - 11:56h

Estou estudando C por conta propria,mas ainda nao estou nesta parte.Mas o cara acima,pelo que ja vi em suas respostas,manja bem.
Achei esse link aqui,talvez ajude:
http://www.linguagemc.xpg.com.br/aloc_dinamica.html


4. Re: Alocação dinamica

???
gokernel

(usa Linux Mint)

Enviado em 23/03/2014 - 19:48h

Um pequeno exemplo usando realloc:

/*

**-------------------------------------------------------------------
**
** Um simples exemplo usando realloc()
**
**-------------------------------------------------------------------
*/

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

int *array = NULL; // nao precisa mas ... inicializei
int len = 0; // nao precisa mas ... fiz tambem ;)

void add (int i)
{
int *temp;

temp = (int*) realloc (array, (len + 1) * sizeof(int));

// verifica se allocou
//
if (temp == NULL)
{
printf ("ERRO - falta de memoria\n");
exit (-1);
}

array = temp;

// define o valor e incrementa ( len )
//
array [len++] = i;
}

int main()
{
int i;

add(100);
add(200);
add(300);
add(400);
add(500);
add(600);
add(700);
add(800);
add(900);
add(1000);

for(i=0;i<len;i++)
printf ("array[ %d ] = %d\n", i, array[i]);

free (array);

printf ("Saindo com sucesso\n");

return 0;
}



Lembrando que realloc nao eh uma função tão simples, internamente ela faz:
01 - Cria um novo bloco de memoria.
02 - Copia bloco de memoria para o novo bloco criado.
03 - Libera o bloco ( nao o novo ).

E dependendo do tamanho do bloco de memoria esse processo poderá ficar lento se for processado constantemente dentro de um loop.