2012-04-18 40 views
1

你好,我有一些问题与bsearch()函数。我收到“访问冲突读取位置”异常。 我使用它,如下所示:在C中动态数组的bsearch

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元。每个元素是从* .txt文档导入的最长22个字符。

'linecount'是整数2402并引用来自同一个* .txt文件的行号。

“WORDMAX”被定义为20

我真的不知道为什么我的函数失败的原因。 我想从linecount或WORDMAX的值有问题。

+0

你怎样称呼compareexp? – chikuba 2012-04-18 01:04:15

+0

它是我的bsearch()的比较器参数,如此处所述http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/ – 2012-04-18 01:06:07

回答

0

看过这个例子后,似乎你可能在公理中缺少一个*或者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 – 2012-04-18 01:16:49

+0

所以每个字符数组是22个字符长?如果那是正确的,char数组的大小将不会是22个字节 – chikuba 2012-04-18 01:20:47

+0

你说得对,大小的正确值是“4”。得到了适当的审判和错误metod,并没有认真的解释... – 2012-04-18 01:26:30