2012-04-18 39 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