• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rgcaldas

[Duvida][C] Vector de ponteiros [Resolvido]

9 mensagens neste tópico

Boas

Cá estou eu com outra duvida

É possível fazer um vector dinâmico de ponteiros?

Eu tenho uma lista, vou percorrer a lista à procura de elementos que correspondam a uma condição, e no fim queria mostrar ao utilizador esses elementos e dar-lhe algumas opções.

Algo deste género 

PTR_TEMP  temp_ptr, vec_ptr;

   temp_ptr = algum ponteiro

   if ((vec_ptr = malloc(sizeof(PTR_TEMP)))==NULL)
      fprintf(stderr,"Erro na alocacao de memoria");

   vec_ptr[0] = temp_ptr 

   free(vec_ptr) /* para o shumy nao vir ralhar comigo :-) */

Devo estar a ver a coisa ao contrário, existe alguma forma de fazer aquilo que pretendo?

Obrigado desde já

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro.

Mas como tens, só crias com um elemento.

para n elementos:

vec_ptr = malloc(n*sizeof(PTR_TEMP))

PTR_TEMP deve ser void* ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro.

Mas como tens, só crias com um elemento.

Vou criando mais com o realloc quando necessário

PTR_TEMP deve ser void* ?

o PTR_TEMP é um ponteiro para uma estrutura.

Mas o problema é que ele diz que na linha:

vec_ptr[0] = temp_ptr ;

Os tipos de dados são incompatíveis  [error: incompatible types in assignment]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Huuum já tou a ver o que queres.

Podes ir esticando com o realloc sim.

Se temp_ptr e  vec_ptr são do mesmo tipo, já seria de esperar que essa linha desse o erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimentei por o vector como void* e fazer o cast em cada atribuição e também não me safei.

Há alguma forma de fazer isto.

Até pode ser sem vectores, eu é que ainda não me lembrei de outra forma.

E obrigado :-)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fazer o que, alocar memória?

É praticamente o que estas a fazer com esse código.

Não interessa qual é o tipo do ponteiro, se tens x e y do mesmo tipo x[0] = y nunca funciona né.

   int n=10;
   PTR_TEMP  temp_ptr=NULL, vec_ptr=NULL;

   if ((vec_ptr = malloc(n*sizeof(PTR_TEMP)))==NULL)
      fprintf(stderr,"Erro na alocacao de memoria");

  //O que é que pretendes com esta linha?
   vec_ptr[0] = temp_ptr 

   free(vec_ptr)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

[quote name='shumy' timestamp='1179862233' post='102135']

  //O que é que pretendes com esta linha?
   vec_ptr[0] = temp_ptr 

O que eu estava a pensar era criar uma "lista" temporária de elementos de outra lista. Do género:

Vector de ponteiros xpto:

  [ 0 ] ponteiro para o 3º elemento da lista

  [ 1 ] ponteiro para o 5º elemento da lista

  [ 2 ] ponteiro para o 8º elemento da lista

Posso sempre criar outra lista para isto mas estava a pensar que seria trabalho a mais.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Precisas de utilizar um apontador para apontadores, ou um array de apontadores. Experimenta assim:

void main() {
estrutura temp_ptr;
PTR_TEMP *vec_ptr;

if ((vec_ptr = (PTR_TEMP*)malloc(10*sizeof(PTR_TEMP)))==NULL)
	fprintf(stderr,"Erro na alocacao de memoria");

vec_ptr[0] = &temp_ptr;

free(vec_ptr);
}

EDIT: grande misturada que tinha feito para ali, new com malloc e tal... ::P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora