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

Aceder a variável de uma struct dentro de outra struct

Discussão em 'Programação' iniciada por UnCiViLiZeD, 26 de Setembro de 2008. (Respostas: 6; Visualizações: 3765)

  1. Boas, tenho o problema referido no titulo.
    O código que fiz é o seguinte...

    e dá-me Segmentation fault.

    Alguém pode ajudar-me?

    Obrigado, cumprimentos.
     
  2. |[Kaos]|

    |[Kaos]| Power Member

    porquê o apontador na estrutura elm ?

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    struct key_t {
    int keysize;
    };
    
    struct elm {
    struct key_t key;
    };
    
    int main() {
    struct elm *newelm;
    newelm = (struct elm*)malloc(sizeof(struct elm));
    if(!newelm)
    return -1;
    
    newelm->key.keysize = 10;
    printf("portanto: %d", newelm->key.keysize);
    free(newelm);
    
    return 0;
    }
    assim vai funcionar ... agora nao sei é se é o que pretendes
     
  3. é um pequeno exemplo de uma situação mais complexa. O que eu pretendo saber é como mexer/aceder na variavel keysize...
     
  4. Ace-_Ventura

    Ace-_Ventura Power Member

    falta-te fazeres alocação do key.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    struct key_t { 
    int keysize; 
    }; 
    
    struct elm {
    struct key_t *key;
    };
    
    int main() {
    struct elm *newelm;
    newelm = (struct elm*)malloc(sizeof(struct elm));
    if(!newelm)
    return -1;
    
    newelm->key = (struct key_t*)malloc(sizeof(struct key_t));
    if(!newelm->key)
    return -1;
    
    
    newelm->key->keysize = 10;
    printf("portanto: %d", newelm->key->keysize);
    free(newelm->key);
    free(newelm);
    
    return 0;
    }
     
  5. Obrigadao, :D.
    Eu tinha tentado isto...
    newelm = (struct elm*)malloc(sizeof(struct elm) + sizeof(struct key_t));
    ... e como nao deu, pensei que estava a ver mal. Mas parece que como há a necessidade de ter o cast (struct key_t*), obriga a um malloc diferente.

    Cumprimentos.
     
  6. MadOnion

    MadOnion Folding Member

    O malloc devolve um valor do tipo void*, daí a necessidade do cast.
    Já agora, estás a fazer SD na fcul né? :002:
     

Partilhar esta Página