2012-05-02 13 views
1

私は構造体の上にchar配列を設定しようとしていますが、それを印刷しようとしました。私はセグメンテーション違反を取得します。私は間違って何をしていますか?この文字列を印刷するときに間違っているのはなぜですか?

typedef struct buckets_{ 
    char *key; 
    data *next; 
}buckets; 

typedef struct hash_table_ { 
    int (*hash_func)(char *); 
    int (*comp_func)(void*, void*); 
    buckets **buckets_array; 
} hash_table, *Phash_table; 

table_p -> buckets_array[0] = malloc(sizeof(buckets)); 
table_p -> buckets_array[1] = malloc(sizeof(buckets)); 

char word2[5] = "Hieo"; 

table_p -> buckets_array[1] -> key = malloc(sizeof(word2)); 
table_p -> buckets_array[1] -> key = word2; 
printf("%s",table_p -> buckets_array[i] -> key); /*Getting segmitation falut here*/ 

Oppは配列を割り当てる関数を持っていたことを忘れていました。配列が割り当てられているとします。

答えて

0

bucket_arrayは決して初期化されないため、無効なポインタです。あなたはそれを最初に初期化する必要があります。

table_p->buckets_array = malloc(number_of_elements * sizeof(buckets*)); 
// now that the top level pointer is initialize 
// you can initialize each element that it points to. 
1

は、ここで私が見ることができるものです:あなたはbuckets_arrayを割り当てることができませんでした

  1. keyのメモリを割り当てましたが、すぐにkey = word2を割り当ててリークしました。私はあなたがstrcpyまたはmemcpyを使用することを意味すると思います。
  2. iという初期化されていない可能性のある変数を使用します。私はこれが問題だと思う。
+0

はい私はいくつかのコードを含んでいませんでした。私はこれの前に配列を割り当てました。しかし、あなたの2番の声明は、なぜ私がエラーを受けているのかもしれない。 –

+0

@LearningC私は3が原因である可能性が高いと考えています。 –

+0

はい、そうでした。ありがとうございました。他の関数からその行をコピーしたので、私はそれを忘れてしまった。ありがとうございました。 –

関連する問題