Ceci est ma fonction de recherche binaire. Je n'arrive pas à trouver l'erreur mais chaque fois que j'essaie d'exécuter le code, cela me donne une erreur de segmentation 11. J'ai l'impression que mon erreur est liée à ma dernière déclaration if.Comment déterminer pourquoi un morceau de code produit une boucle infinie?
void binary(struct list *A[], char search[15], int start, int
end) {
if(start <= end) {
int middle = (start + end)/2;
if(strcmp(search, A[middle]->name) == 0){
printf("found");
exit(0);
} else if (strcmp(search, A[middle]->name) > 0){
int start = middle + 1;
int end = end;
binary(A, search, start, end);
} else if (strcmp(search, A[middle]->name) < 0){
int start = start;
int end = middle - 1;
binary(A, search, start, end);
} else if (start == (end - 1)) {
printf("%s was not found in the list", search);
exit(0);
}
}
}
Comment êtes-vous censé atteindre cette dernière instruction else-if si elle n'est appelée que lorsque strcmp renvoie un nombre différent de 0, inférieur à 0 ou supérieur à 0? –
La liste est-elle triée par ordre ascendant ou descendant lexicographique? En outre, vous pourriez bénéficier de se débarrasser de l'extrémité int = fin; et int start = start; déclarations. Si le dernier bloc n'est pas pertinent, le message "was not found" devrait être hors de portée de votre bloc if externe. –
début et fin sont des indices, donc ça ne devrait pas non? –