0

リンクリストの構造で宣言したファイルポインタを使おうとしていますが、NULL値として取得し続けています。

私は次の構造を持っています:

struct _hash_table
{
    char found;
    struct _hash_chain *hash_chain;
}

struct _hash_chain
{
    uint64_t value;
    FILE *fout;
    struct _hash_chain *next;
}

struct _hash_table hash_table[TABLE_SIZE];

hash_table [i]-> hash_chain-> fout = NULLを取得し続け、そのポインタアドレスはnilです。

ポインタに動的にメモリを割り当てる必要がありますか?

4

1 に答える 1

1

struct _hash_table hash_table[TABLE_SIZE];-はポインタ変数でstruct _hash_chainあるため、これはメモリを割り当てません。hash_chain_hash_table

...
struct _hash_table hash_table[TABLE_SIZE];
for (i = 0; i < TABLE_SIZE; i++);
{
    hash_table[i].hash_chain = (struct _hash_chain *)malloc(sizeof(struct _hash_chain));
    memset(hash_table[i].hash_chain, 0, sizeof(struct _hash_chain));
}

//Then do file open for TABLE_SIZE times
//hash_table[0].hash_chain->fout = fopen("file.txt", "w");
...

動的メモリ割り当てなしでアクセスh_table[i].hash_chainすると、クラッシュ(未定義の動作)が発生します。nextポインタのお手入れをお願いします。

于 2012-08-21T11:35:13.610 に答える