j4m35_b0nd Postado Novembro 29, 2009 Denunciar Share Postado Novembro 29, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Novembro 29, 2009 Denunciar Share Postado Novembro 29, 2009 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 j4m35_b0nd Postado Novembro 29, 2009 Autor Denunciar Share Postado Novembro 29, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Novembro 29, 2009 Denunciar Share Postado Novembro 29, 2009 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
j4m35_b0nd
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:
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
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.