chris~ Postado Agosto 5, 2014 Denunciar Share Postado Agosto 5, 2014 (editado) eu tenho isso em um arquivo .h porem a hora q eu rodo ele insere 2 chaves, e depois da falha de segmentação não sei mais o que fazer para resolver, sera que alguém poderia me ajudar? struct arvoreBinAVL { unsigned long int chave; struct arvoreBinAVL *esq; struct arvoreBinAVL *dir; short int fb; }; typedef struct arvoreBinAVL NoArvBinAVL; NoArvBinAVL **rotacaoDir(NoArvBinAVL **y); NoArvBinAVL **rotacaoEsq(NoArvBinAVL **y); NoArvBinAVL **rotacaoEsqDir(NoArvBinAVL **y); NoArvBinAVL **rotacaoDirEsq(NoArvBinAVL **y); NoArvBinAVL *buscaNoArvBinAVL(NoArvBinAVL **r, unsigned long int k) { if(*r == NULL) return NULL; if ((*r)->chave == k) return *r; if ((*r)->chave > k){ return buscaNoArvBinAVL(&(*r)->esq, k); } else return buscaNoArvBinAVL(&(*r)->dir, k); } void insereNoArvBinAVL(NoArvBinAVL **r, unsigned long int k) { if ((*r) == NULL){ (*r) = malloc(sizeof(NoArvBinAVL)); if((*r) == NULL) return; (*r)->chave = k; (*r)->esq = NULL; (*r)->dir = NULL; (*r)->fb = 0; return; } if((*r)->chave > k){ insereNoArvBinAVL(&(*r)->esq, k); (*r)->fb -= 1; if((*r)->fb == 0 || (*r)->fb == 1 || (*r)->fb == -1){ return; } if((*r)->fb == 2){ if(((*r)->esq)->fb == 1){ r = rotacaoEsq(r); return; } else if(((*r)->esq)->fb == 0){ r = rotacaoEsq(r); return; } else{ r = rotacaoDirEsq(r); return; } } else{ if(((*r)->esq)->fb == 1){ r = rotacaoEsqDir(r); return; } else if(((*r)->esq)->fb == 0){ r = rotacaoDir(r); return; } else{ r = rotacaoDir(r); return; } } } else{ insereNoArvBinAVL(&(*r)->dir, k); (*r)->fb += 1; if((*r)->fb == 0 || (*r)->fb == 1 || (*r)->fb == -1){ return; } else if((*r)->fb == 2){ if(((*r)->dir)->fb == 1){ r = rotacaoEsq(r); return; } else if(((*r)->dir)->fb == 0){ r = rotacaoEsq(r); return; } else{ r = rotacaoEsqDir(r); return; } } else{ if(((*r)->dir)->fb == 1){ r = rotacaoEsqDir(r); return; } else if(((*r)->dir)->fb == 0){ r = rotacaoDir(r); return; } else{ r = rotacaoDir(r); return; } } } } NoArvBinAVL **rotacaoEsq(NoArvBinAVL **y){ NoArvBinAVL *x = (*y)->dir; (*y)->dir = x->esq; x->esq = *y; *y = x; return y; } NoArvBinAVL **rotacaoDir(NoArvBinAVL **y){ NoArvBinAVL *x = (*y)->esq; (*y)->esq = x->dir; x->dir = *y; *y = x; return y; } NoArvBinAVL **rotacaoEsqDir(NoArvBinAVL **y){ y = rotacaoDir(&((*y)->esq)); return rotacaoEsq(&(*y)); } NoArvBinAVL **rotacaoDirEsq(NoArvBinAVL **y){ y = rotacaoEsq(&((*y)->dir)); return rotacaoDir(&(*y)); } Editado Agosto 5, 2014 por chris~ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 xboxslim Postado Agosto 9, 2014 Denunciar Share Postado Agosto 9, 2014 O erro de segmentation fault pode ocorrer devido ao mau uso de ponteiro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
chris~
eu tenho isso em um arquivo .h
porem a hora q eu rodo ele insere 2 chaves, e depois da falha de segmentação
não sei mais o que fazer para resolver, sera que alguém poderia me ajudar?
Editado por chris~Link para o comentário
Compartilhar em outros sites
1 resposta 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.