Ir ao conteúdo
  • Cadastre-se

donutLukke

Membro Pleno
  • Posts

    23
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de donutLukke em Invasão de memória de uma string sobre outra string foi marcado como solução   
    Consegui encontrar o erro, a invasão de memória deve ter ocorrido por falha do compilador ou do buffer, como disse anteriormente, o erro estava na função "compareAluno", as condições colocadas estavam dando conflito por causa da seguinte condição "else if(strlen(variavel) <= (CANOME-1))", dessa forma, ao cair uma string de tamanho igual ou maior que "char cpf[CACPF]" , o código fazia a comparação da string "cpf" digitada com a string "nome" já adicionada.
     
    Forma errada do código:
    int compareAluno(stc_Aluno **a, char variavel[]){ int i, j, aux = 0; if(*a != NULL){ if(strlen(variavel) == (CAID-1)){ if(strcmp(variavel, (*a)->id) == 0) return 1; else if(atof(variavel) < atof((*a)->id)) i = compareAluno(&(*a)->esquerdo, variavel); else if(atof(variavel) > atof((*a)->id)) j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(strlen(variavel) <= (CANOME-1)){ // erro nesta linha if(strcmp(variavel, (*a)->nome) == 0){ return 1; } int i = compareAluno(&(*a)->esquerdo, variavel); int j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(strlen(variavel) == (CACPF-1)){ if(strcmp(variavel, (*a)->cpf) == 0) return 1; int i = compareAluno(&(*a)->esquerdo, variavel); int j = compareAluno(&(*a)->direito, variavel); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } } else{ if(aux == 1) return aux; } return aux; }  
    Forma correta do código:
    int compareAluno(stc_Aluno **a, char variavel[], int opcao){ int i, j, aux = 0; if(*a != NULL){ if(opcao == 1){ if(strcmp(variavel, (*a)->id) == 0) return 1; else if(atof(variavel) < atof((*a)->id)) i = compareAluno(&(*a)->esquerdo, variavel, opcao); else if(atof(variavel) > atof((*a)->id)) j = compareAluno(&(*a)->direito, variavel, opcao); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(opcao == 2){ if(strcmp(variavel, (*a)->nome) == 0) return 1; int i = compareAluno(&(*a)->esquerdo, variavel, opcao); int j = compareAluno(&(*a)->direito, variavel, opcao); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } else if(opcao == 3){ if(strcmp((*a)->cpf, variavel) == 0) return 1; int i = compareAluno(&(*a)->esquerdo, variavel, opcao); int j = compareAluno(&(*a)->direito, variavel, opcao); if(i == 1) return aux = 1; else if(j == 1) return aux = 1; else return 0; } } else{ if(aux == 1) return aux; } return aux; }  
    Desde já, agradeço pelo aprendizado de como formular um tópico seguindo as diretrizes do fórum para explicitar minha dúvida.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!