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 ,它的指针地址为零。

我需要为指针动态分配内存吗?

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 回答