Segmentation fault bei bsearch()
-
#include <stdio.h> #include <stdlib.h> #include <time.h> #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) int qsort_cmp(const void *a, const void *b) { return (*(int *)a - *(int *)b); } int bsearch_cmp(const void *a, const void *b) { return (*(int *)a - *(int *)b); } int main(void) { int i = 0; int *item = NULL; int key = 23; int numbers[20]; srand(time(NULL)); for (i = 0; i < 20; i++) { numbers[i] = 1 + rand() % 100; printf("%d ", numbers[i]); } printf("\n"); qsort(numbers, ARRAY_SIZE(numbers), sizeof(int), qsort_cmp); for (i = 0; i < 20; i++) { printf("%d ", numbers[i]); } printf("\n"); item = bsearch(&key, numbers, ARRAY_SIZE(numbers), sizeof(int), bsearch_cmp); if (item != NULL) { printf("%d found\n", *item); } else { printf("%d not found\n", *item); } printf("END\n"); return 0; }
Kann mir einer sagen warum ich hier ein Segmentation fault hab.
-
rifkin schrieb:
if (item != NULL) { printf("%d found\n", *item); } else { printf("%d not found\n", *item); }
Kann mir einer sagen warum ich hier ein Segmentation fault hab.
Ganz einfach... guck dir den zitierten Code-Teil an.
-
Zeile 44 dereferenziert einen NULL Zeiger, das sollte immer fehlschlagen.
-
Danke für eure Antwort. Ich war hier völlig auf die bsearch Funktion fixiert und hab das nicht gesehen.
-
rifkin schrieb:
Danke für eure Antwort. Ich war hier völlig auf die bsearch Funktion fixiert und hab das nicht gesehen.
Wie man solche Probleme selber löst (außer durch draufgucken): Debugger benutzen. Der hätte dir direkt sagen können, wo der Fehler auftritt und warum.