2012-04-18 3 views
1

Здравствуйте, у меня есть некоторые проблемы с функцией bsearch(). Я получаю исключение «Чтение местоположения нарушения доступа». Я его с помощью следующим образом:bsearch с динамическими массивами в C

typedef char **arstr; 

int compareexp(const void *a, const void *b){ 
    return strcmp(*(const arstr)a, *(const arstr)b); 
} 

binsrch = bsearch(&key, file_array, linecount, WORDMAX+2, compareexp); 

«file_array» мой динамический массив строк с 2401 элементами. каждый элемент имеет длину не более 22 символов, импортированных из документа * .txt.

«linecount» - целое число 2402 и относится к номеру строки из того же документа * .txt.

«WORDMAX» определяется как 20

Я не получить причину, почему моя функция терпит неудачу. Я думаю, что что-то не так со значениями из linecount или WORDMAX.

+0

как вам позвонить compareexp? – chikuba

+0

это сопоставитель Аргумент моего bsearch(), как описано здесь http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/ –

ответ

0

После того, как вы посмотрите на пример, похоже, что вы либо можете потерять * в comperison, либо WORDMAX +2 - это не правильный подход. Попробуйте изменить этот WORDMAX, чтобы получить размер используемой структуры.

+0

file_array заполняется следующим образом: «strcpy (file_array [i], ln) ; " ln определяется как" char ln [WORDMAX + 2]; " , поэтому каждый элемент должен иметь 22 бита. Где * отсутствует? Я скопировал сравнительный термометр оттуда: http://bytes.com/topic/c/answers/667528-bsearch-dynamic-array –

+0

, поэтому каждый массив символов имеет длину 22 символа? если это правильно, размер массива char не будет 22 байта – chikuba

+0

Вы, где правильно, правильное значение для размера «4». Получил этот метод Trial и Error и не имеет серьезных объяснений для него ... –