-2

だから私は文字列値を配列内のオブジェクトに割り当てようとしています。

オブジェクトコードは次のとおりです。

typedef struct BiTreeData_ {
    char* word;
    int start_word_count;
    int end_word_count;
    int start_ranking;
    int end_ranking;
} BiTreeData;

私のメインでは、以下を使用してBiTreeDataへのポインターの配列を作成します。

BiTreeData **dataarray;
dataarray=(BiTreeData**)malloc(sizeof(BiTreeData*)*maintree.size);

構造体内の変数の1つに次の値を割り当てようとします。

int z = dataarray[i]->start_word_count;

プログラムがクラッシュします。どんな助けでもいただければ幸いです。ありがとうございました。

4

4 に答える 4

2

ここにあなたのコード

BiTreeData **dataarray;

dataarray=(BiTreeData*)malloc(sizeof(BiTreeData)*maintree.size);

の配列にメモリ空間を割り当てますが、オブジェクト自体BitTreeData*には空間を割り当てていません。BitTreeData初期化されていないメモリを指すポインターの動的配列があるだけです。

BitTreeDataポインターではなく配列を作成するだけで、おそらくはるかに簡単になります。を使用してこれを達成できます

 BiTreeData *dataarray;
 dataarray=(BiTreeData*)malloc(sizeof(BiTreeData)*maintree.size);

これは、の配列を作成するだけBitTreeData です。その後、他の配列と同じように、配列内の各項目にアクセスできます (配列は ではBitTreeDataないことを思い出してくださいBitTreeData*) 。

于 2012-11-09T20:38:02.493 に答える
0

定義している理由はありますか

BiTreeData **dataarray;

これを希望どおりに機能させるには、次のように定義する必要があると思います。

BiTreeData *dataarray;

これにより、BiTreeData 構造体の配列を malloc できます。

構造体の配列を作成するには:

BiTreeData *dataarray;

構造体の配列用にヒープにメモリを割り当てるには:

dataarray = malloc(sizeof(BiTreeData)*maintree.size);

配列内の構造体要素の値を設定するには:

int z = 5;
dataarray[i].start_word_count = z;

構造体配列から値を抽出するには:

int z = dataarray[i].start_word_count;
于 2012-11-09T20:37:16.843 に答える
0

の配列の各要素にメモリを割り当てる必要がありますdataarray

dataarray[i] = (BiTreeData *) malloc ((sizeof(BiTreeData)

あなたが入れた次の行コード

array=(BiTreeData**)malloc(sizeof(BiTreeData*)*maintree.size);

このコードでは、ポインターの配列が割り当てられています。ただし、これらのポインターはまだコンテンツを指していません。そのため、配列内の各ポインターにメモリを割り当てる必要があります

于 2012-11-09T20:45:05.730 に答える
-1

ポインターの配列を割り当てているため、要素のサイズはBiTreeData *ではなくのサイズにする必要がありBiTreeDataます。

dataarray= (BiTreeData **)malloc(sizeof(BiTreeData *) * maintree.size);

編集
その後、この間違いを修正するために質問が編集されました。

于 2012-11-09T20:37:13.367 に答える