這是我的二進制搜索功能。我似乎無法找到錯誤,但每次我嘗試運行代碼時,它都會給我一個分段錯誤11.我覺得我的錯誤與我的最後一條if語句有關。如何確定一段代碼產生無限循環的原因?
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);
}
}
}
你是如何應對最後一種情況的 - if語句是否只在strcmp返回的數字不是0,小於0或大於0時才被調用? –
列表按照字典順序升序或降序排列?另外,你可能從擺脫int end = end中受益;和int start = start;聲明。最後一個else塊如果不相關,「未找到」消息應該超出你的外部if塊的範圍。 –
開始和結束是指數,所以它不應該不重要? –