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

+0

これはコンパレータですここで説明したmy 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

すべてのchar配列は22文字分なので?それが正しい場合、char配列のサイズは22バイトではありません – chikuba

+0

あなたは正しい場合、サイズの正しい値は "4"です。その試行錯誤メトロデッドを得て、それについて深刻な説明を持っていない... –

関連する問題