打印后丢失链表

时间:2017-04-05 19:06:25

标签: c data-structures printing linked-list void-pointers

我有以下代码:

if (strcmp(method, "print") == 0){
            for (i = 0; i < hashtable->M; i++){
                fprintf(fout,"[%d] :", i);
                if (hashtable->v[i] != NULL)
                    while(hashtable->v[i]){
                        fprintf(fout," ");
                        ((Pair*)hashtable->v[i]->info)->fp(hashtable->v[i], fout);
                        hashtable->v[i] = hashtable->v[i]->urm;
                    }
                fprintf(fout,"\n");
            }
        }

在我的代码中,当我遇到&#34; print&#34;从文件中,我必须打印出我的哈希表中存储的值。 M是哈希表的大小,而v是指向链表的void *。这一切都很好,但如果我必须在哈希表中添加一些值然后打印它们,打印后我将丢失所有以前存储的值。我认为这可能与我这样做的事实有关:hashtable->v[i] = hashtable->v[i]->urm;但即便如此,我也不知道如何恢复价值。我正在考虑将某些东西作为哈希表的辅助指针,但这对我来说失败了。注意,结构如下

typedef struct celulag {
  void *info;
  struct celulag *urm;
} TCelulaG, *TLG, **ALG;

typedef unsigned int (*TFHash)(const void*, size_t M, size_t range);

/* structura tabela Hash */
typedef struct {
    size_t M;
    TFHash fh;
    TLG *v;
} TH;

typedef void (*TPrint)(TLG l, FILE *g);

typedef struct {
    void *key;
    void *value;
    TPrint fp;
    int frequency;
} Pair;

请注意,这是在一段时间内完成的,因此赋值将如下所示: 添加3个值,打印,添加另外4个值,打印。添加前3个值后,如果我引发,它都是好的,在添加接下来的4个值后,如果我打印,则只显示最后4个值。 有人可以帮忙吗?非常感谢你。

0 个答案:

没有答案