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

Existe alguma função que retorna o número de espaços alocados pra um d


Ricardo Martins

Pergunta

Vamos supor que no meu código exista a seguinte linha:

x= (int *) malloc (10);

Isso significa que eu aloquei 10 espaços pro ponteiro x que é do tipo int.

Mas no programa que eu estou fazendo, não dá pra saber exatamente a quantidade de espaços alocados porque essa quantidade é definida dependendo de muitos fatores. Sendo assim, eu precisaria de alguma função que retorna o número de espaços alocados pra um determinado ponteiro.

Existe alguma função dessas?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Até onde sei, não há como saber

Esse é o motivo pelo qual você tem que passar o tamanho de um vetor para uma ufnção que o percorre, por exemplo.

O C não sabe o tamanho do vetor. Ele só sabe o endereço base dele. Nesse caso, x = &x[0]. Só isso. Onde x termina quem tem que saber é o programador

Link para o comentário
Compartilhar em outros sites

  • 0

Sugestões:

Guarde o valor você mesmo em uma struct e use essa como "interface" para um ponteiro.

Exemplo:

typedef struct {
    unsigned int tamanho;
    void *dados;
} ponteiro;

ponteiro *alocar_ponteiro(int tamanho) {
    ponteiro *p = (ponteiro *) malloc(sizeof(ponteiro));
    p->tamanho = tamanho;
    p->dados = malloc(tamanho);

    return p;
}

void liberar_ponteiro(ponteiro *p) {
    free(p->dados);
    free(p);
}
Guarde o valor uma posição antes. Isso é mais prático, mas tem que tomar cuidado com os free's e mallocs. Seria bom escrever funções própria para tal. Exemplo, não testado:
int tamanho = 4;
int *ponteiro = (int *) malloc(tamanho + 4);

*ponteiro = tamanho;
ponteiro = ponteiro + 1;

*ponteiro = <o inteiro em si>;

int tamanho_ponteiro = *(ponteiro - 1);

Observação: Não estou certo da aritmética de ponteiros no momento, mas acho que como o ponteiro é interpretado como int, seria o certo de usar +1 e -1 mesmo. Porém, quando estiver trabalhando com tipos char, terá que ser +4 e -4. Um mecanismo para resolver isso seria interpretar tudo como char* na alocação, e depois retornar a variável alocada (já na posição do ponteiro e não do tamanho), deixando quem chamou castar para o tipo que quiser.

Abraços.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...