1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sizeof - C

Discussão em 'Programação' iniciada por wedlled, 17 de Novembro de 2006. (Respostas: 5; Visualizações: 1254)

  1. wedlled

    wedlled Power Member

    Fiz aqui um programazito para testar uns erros num projecto.

    Por exemplo, neste código

    epá, o sizeof(buff) na função secundária não devia ser igaul ao sizeof(bla) do main?
    A mim o sizeof(bla) dá-me certo - neste caso 6 - mas o do buff dá-me sempre 4.
    Ele não devia ler directamente do que esta alocado naquela memoria do ponteiro?

    thnks pela ajuda...
     
  2. Koncaman

    Koncaman Utilizador Saloio

    não... o buff é um ponteiro para caracter, e o bla é um vector de 6 caracteres... é normal que tenham tamanhos dferentes
    o que tu deves querer é fazer o sizeof(*buff)... ou será &buff :S:S

    whatever, o que tu queres é o sizeoff do elemento para o qual o ponteiro está a apontar, e não do proprio ponteiro, que é o que tu estas a fazer. assim o sizeof dá-e o tamanho de um nº hexadecimal, correpondente a um endereço de memoria.

    acho que é isso...
     
    Última edição: 17 de Novembro de 2006
  3. alph

    alph Power Member

    Não deves usar o sizeof() para loops de arrays. Até porque o sizeof() não é uma função mas sim um comando do compilador que é executado em compile time.

    O sizeof devolve 6 na primeira vez porque alocaste explícitamente bla com 6 posições de memória. Mas devolve 4 nas outras vezes porque o argumento da função é um char*, e qualquer apontador tem 4 bytes de memória.

    A solução é usares mais um argumento na tua função, representando o tamanho do array.

    Mais uma coisa, cuidado ao fazeres isto:
    Código:
    char *temp;
    memcpy(temp,buff,6);
    Não alocaste memória para tal, isto até causa um erro na execução, relativo à memória. Devias alocar memória para temp:
    Código:
    char *temp = malloc(6);
    memcpy(temp,buff,6);
     
  4. wedlled

    wedlled Power Member

    Yup, era esse o problema mesmo. Thnks. Já estou a debitar código à tempo de mais :P

    @alph: ya, este programa foi mesmo so para exemplo. Os memcpy estão todos a apontar par uma entidade de uma estrutura que é iniciada (até estáticamente).

    Já agora, alguem tem alguma reza que costume fazer ao chgar ao 100º Segmentation Fault? :002:
     
    Última edição: 17 de Novembro de 2006
  5. PrOdG

    PrOdG Power Member

    "gdb nosso que estás no céu.." :D
     
  6. souto

    souto To fold or to FOLD?

    abençoado seja o core dump
     

Partilhar esta Página