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 は、配列を割り当てる関数があったことを忘れていました。配列が割り当てられたとします。

4

2 に答える 2

1

ここに私が見ることができるものがあります:

  1. を割り当てませんでしたbuckets_array
  2. にメモリを割り当てましkeyたが、 を割り当てることですぐにリークが発生しましたkey = word2strcpyまたはを使用するつもりだったと思いますmemcpy
  3. という名前のおそらく初期化されていない変数を使用しますi。これが問題だと思います。
于 2012-05-02T00:36:28.497 に答える
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.
于 2012-05-02T00:34:26.490 に答える