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

Estrutura dentro de outra estrutura - erro só em alguns campos


kinze

Pergunta

Boa tarde,

Eu estou a fazer um trabalho para a universidade em C e, já estando um bocado enferrujado em C não estava à espera que me acontecesse um erro destes. Já estou à volta do caso há 3 dias e não consigo mesmo perceber sequer qual é o problema. O código necessário para a resolução do problema é:

arvore newNode(arvore t, int x, int y)

{
    t->y = y;

    t->x = x;

    

    t->right = NULL;

    t->left = NULL;

    return t;

}

quadtree newQuadNode(int x, int y)

{
    quadtree quad = NULL;


    quad = (quadtree) malloc(sizeof(quad));
    quad->forest = NULL;
    quad->forest = (arvore) malloc(sizeof(tree));
    quad->forest = newNode(quad->forest, x, y);

    quad->lowerX = x;

    quad->lowerY = y;

    quad->upperX = x;

    quad->upperY = y;

    quad->capacidade = 1;

    quad->nw = NULL;

    quad->sw = NULL;

    quad->ne = NULL;

    quad->se = NULL;


    return quad;    

}


Com as estruturas:

typedef struct arv

{

    int x;

    int y;

    struct arv * left;

    struct arv * right;

}tree;



typedef tree * arvore;



typedef struct nodo

{

    int upperX, lowerX;

    int upperY;
    int lowerY;

    int capacidade;

    arvore forest;

    struct nodo *nw;

    struct nodo *ne;

    struct nodo *sw;

    struct nodo *se;

}quad;

o que me acontece quando invoco a newQuadNode para uma quadtree

quadtree q = NULL;

q = newQuadNode(9, 112);

e depois peço pra mostrar, o que acontece é que q->forest->y = um número elevadíssimo (que acho que é o endereço) e q->forest->x = 1, que ao fazer debugging com o ddd, descobri que é alterado pela atribuição q->capacidade = 1 (!!!)

dada a relativa facilidade do código não entendo onde me possa ter enganado. Se alguém conseguir ver o que eu falhei em ver tem, desde já, os meus agradecimentos:)

Editado por kinze
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Opa,

Cara como você estou muito enferrujado em C. Estou aqui mais de curioso.

Tem como postar o código todo funcionando inclusive com o erro que está dizendo? Porque aqui dá vários erros na hora da compilação.

Não estou encontrando também o tipo quadtree...ele é usado para inciar uma variável ou um ponteiro no seu código mas eu não consigo achar o tipo quadtree declarado. Não sei se esse tipo é da própria linguagem.

Outra coisa, está usando stdlib e stdio só?

Está estudando estrutura de dados? Isso que está implementando é uma árvore?

Eu ainda vou aprender isso, estou lendo já sobre o assunto e gostaria de primeiramente entender seu código aqui, pra depois tentar te ajudar, caso não apareça ninguém pra isso.

Akelabrasssssss

Link para o comentário
Compartilhar em outros sites

  • 0
Opa,

Cara como você estou muito enferrujado em C. Estou aqui mais de curioso.

Tem como postar o código todo funcionando inclusive com o erro que está dizendo? Porque aqui dá vários erros na hora da compilação.

Não estou encontrando também o tipo quadtree...ele é usado para inciar uma variável ou um ponteiro no seu código mas eu não consigo achar o tipo quadtree declarado. Não sei se esse tipo é da própria linguagem.

Outra coisa, está usando stdlib e stdio só?

Está estudando estrutura de dados? Isso que está implementando é uma árvore?

Eu ainda vou aprender isso, estou lendo já sobre o assunto e gostaria de primeiramente entender seu código aqui, pra depois tentar te ajudar, caso não apareça ninguém pra isso.

Akelabrasssssss

Oi,

estou a estudar estruturas de dados para implementar indices numa base de dados multidimensional. Acabei por resolver o problema hoje à tarde da seguinte forma:

estava declarado que uma quadtree tinha, como campo 1 arvore binaria do tipo arvore. Ora o tipo arvore estava definido como:

typedef struct arv * arvore.

o tipo quadtree estava definido como:

typedef struct nodo * quadtree.

e ao longo das funções trabalhava sempre com os tipos arvore e quadtree. Mudei isso tudo e fiquei a trabalhar com os apontadores iniciais.. onde tinha arvore substitui por (struct arv *) e onde tinha quadtree substitui por (struct nodo*) e tudo ficou a funcionar bem.. não percebi o porque disso visto que pensava q a declaração typedef fazia com que a utilização das duas maneiras fosse equivalente..

obg:)

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...