首页 > 解决方案 > C - 使用带有 ** 参数的函数释放结构的分配内存

问题描述

所以我遇到了一个释放字典类型分配内存的函数的问题。
这是我使用的结构和功能:

struct word_count_t {
    char *word;
    int counter; //how many times word was repeated
};

struct dictionary_t
{
    int size; //number of words
    int capacity; //capacity of wc
    struct word_count_t *wc; //pointer to words 
};


void destroy_dictionary(struct dictionary_t** d) 
{
    if(d == NULL) return;
    int i;
    for(i = 0; i < d->size; i++)
    {
        free(d->wc->word+i);
    }
    free(d->wc);
    free(d);
}   

当函数声明如下时它正在编译:

void destroy_dictionary(struct dictionary_t* d)

如果需要,我不知道如何在此处取消引用并消除以下错误:

[Error] request for member 'size' in '* d', which is of pointer type 'dictionary_t*' (maybe you meant to use '->' ?)

标签: cpointersstructfreedereference

解决方案


您需要先取消引用d

for (i = 0; i < (*d)->size; i++)
{
    free((*d)->wc->word+i);
}

推荐阅读