Ir para conteúdo
Fórum Script Brasil
  • 0

Alocação dinâmica de memória e sizeof();


j4m35_b0nd

Pergunta

Olá.

Estou usando alocação dinâmica de memória para criar, e ampliar conforme a necessidade, um vetor.

Como não poderei fazer um contador para saber quantas posições tem esse vetor, minha intenção era fazer algo do tipo:

tamanho_do_vetor = sizeof(ponteiro_para_o_vetor) / sizeof(tipo_de_variavel_do_vetor)

Não consegui fazer conforme o exemplo acima.

sizeof(ponteiro) retorna 4 (acredito que seja o tamanho do ponteiro)

sizeof(*ponteiro) retorna o mesmo que sizeof(tipo_de_variavel_do_vetor)

Alguém sabe o que posso fazer para saber o tamanho do vetor alocado?

Obrigado.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Você tá usando como lista encadeada, adicionando nós quando precisa, ou tá usando o realloc?

E por que não pode usar um contador?

Eu usarei o realloc, pois desconheço uma lista encadeada.

Eu até posso fazer um contador, mas acredito que daria muito trabalho. Estou desenvolvendo um editor de texto para a faculdade, e minha idéia é alocar posições na memória correspondentes a cada linha de texto, e, para cada linha, alocar posições para caracteres.

Para mover o cursor, eu preciso saber o tamanho da linha em que ele está. Se eu fizer um contador, terei que fazer um contador para cada linha, e como não sei quantas linhas serão, terei que usar alocação dinâmica também para criar um vetor, onde cada posição corresponda a uma linha do texto, e em cada uma de suas posições, terei um contador diferente.

Se ouver uma forma de saber a quantidade de memória alocada, eu posso dividir o tamanho da memória alocada, que vai ser N x CHAR, por 1 x CHAR. Acredito que, se isso for possível de ser feito, é bem mais simples do que gerar um vetor apenas para contadores. Caso não aja forma de fazer isso, ai farei os vários contadores individuais.

PS: Eu agradeço se você puder me explicar o que é lista encadeada.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu perguntei se usou alguma estrutura de lista apenas pra tentar entender a dúvida.

No caso de lista, como o ponteiro aponta apenas pra o primeiro elemento da lista, o sizeof retornaria o tamanho apenas daquele elemento.

Achei que usando realloc ele retornaria o tamanho do bloco de memória inteiro daquele ponteiro, assim como numa array, mas acabei de testar aqui e ele faz a mesma coisa que no caso de cima.

int x[10];

sizeof(x) retorna o tamanho inteiro da array (tamanho do int * 10).

int *x;

x = malloc(sizeof(int) * 10);

sizeof(x) retorna apenas o tamanho do ponteiro (tamanho de (*int)).

Isso acontece porque usando a notação de array, [], o tamanho da array é um const, enquanto que usando ponteiros o compilador não tem controle direto sobre o tamanho dele.

Então, até onde eu sei, o jeito é criar algum contador mesmo.

Mas talvez alguém apareça com um jeito mais simples.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...