The compareStrings is going to compare two strings. The code below works fine when the void pointer is cast to char pointer.
int compareStrings(void *value1, void *value2) {
    const char *str1, *str2;
    str1 =  (char *)value1;
    str2 =  (char *)value2;
    return strcmp(str1, str2);
}
However, when I cast the type to pointer to pointer to a char, the code dumps segmentation fault error which I think, reasonably, it should not.
int compareStrings(void *value1, void *value2) {
    const char **str1, **str2;
    str1 =  (char **)value1;
    str2 =  (char **)value2;
    return strcmp(*str1, *str2);
}
Can anyone explain the problem with the second function?
UPDATE:
The complete code is:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(void *value1, void *value2);
int binarySearch(void **array, int size, void *value,
             int(*compareFunc)(void *, void *)); 
int compareStrings(void *value1, void *value2);
int binarySearch(void **array, int size, void *value,
             int(*compareFunc)(void *, void *)) {
    int low, mid, high, compareResult;
    low = 0;
    high = size;
    while (low < high) {
        mid = low + ((high - low) / 2);
        compareResult = (*compareFunc)(array[mid], value);
        if (compareResult < 0) {
            low = mid + 1;
        } else {
            high = mid;
        }
    }
    return low;
}
int compareStrings(void *value1, void *value2) {
    const char *str1, *str2;
    str1 =  (char *)value1;
    str2 =  (char *)value2;     
    return strcmp(str1, str2);
}
int main() {
    int nElements, maxStringLen, index;
    char **stringArray;
    char *sToFind;
    nElements = 10;
    maxStringLen = 100;   
    sToFind = NULL;
    stringArray = malloc(sizeof(char *) * nElements);
    for (int i = 0; i < nElements; i++) {
        stringArray[i] = malloc(sizeof(char) * maxStringLen);
        sprintf(stringArray[i], "sample%d", i+1);
    }
    sToFind = "sample3";
    index = binarySearch((void **)stringArray, nElements, sToFind,         compareStrings);
    if (index >= nElements) {
        printf ("ERROR: value %s not found at index %d\n", sToFind, index);
    }else{
        printf("item found at index %d!\n", index);     
    }
    for(int i = 0; i < nElements; i++) {
        free(stringArray[i]);
    }
    free(stringArray);
    return 0;   
} 
 
     
    