Ir para conteúdo

POWERED BY:

Arquivado

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

paivadaniel

Vetor de tamanho não declarado

Recommended Posts

Olá pessoal, para economizar memória em um projeto gostaria de usar algo do tipo:

 

int k[];

 

while (f<30) {

k[f] = 10*f;

printf ("k[%d] = %d \n\r", f, k[f]);

f++;

}

 

 

Uso um compilador para PIC, e o código compilou, porém deu erro, os prints saíram todos desta forma:

 

k[0] = 0;

k[1] = 0;

...

k[29] = 0;

 

 

Pensei em alocação dinâmica com malloc, porém, teria que usar um scanf por exemplo, para determinar o tamanho do meu vetor, por exemplo:

 

scanf("%d", &n);

 

k = (int*)malloc(n*sizeof(int))

 

Abraço.

Daniel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!

 

Isso não tem como acontecer. Matrizes (ou vetores, como teimam em chamar) da linguagem C tem tamanho pré-definido e que não pode ser variado. Não há como o que você quer acontecer.

 

Afinal, para quê existiria a classe std::vector da STL da C++, que funciona exatamente para isso, se não fosse necessário?

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em seu código, parece que você utiliza sempre 30 posições do vetor. O 'melhor' a se fazer é declarar um vetor de 30 posições.

 

O C permite que se declare 'variable length arrays', cujo tamanho é especificado em tempo de execução:

 

unsigned int n = 0;

// ... código para modificar n

int array[n];

 

A questão de economia de espaço é mais complexa do que parece. Matematicamente, faz sentido dobrar seu buffer a cada vez que ele ficar cheio (com uso cuidadoso do realloc, por exemplo), e depois encolhê-lo ao mínimo necessário para armazenar seus elementos. Isso impõe equilíbrio entre o tempo desperdiçado com alocações e o espaço usado para armazenamento.

 

Duvido que para seu projeto isso seja necessário. Se for, posso postar aqui com mais detalhes sobre a estratégia acima.

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.