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.


  • Mod

    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.


Anmelden zum Antworten