从结构中释放双指针
Posted
技术标签:
【中文标题】从结构中释放双指针【英文标题】:Freeing a double pointer from a struct 【发布时间】:2017-08-24 19:34:24 【问题描述】:我的 delete_table 函数有问题。所以我有 2 个结构
struct _entry_
int key;
int data;
struct _entry_* next;
struct _entry_* prev;
;
typedef struct _entry_ entry;
struct _table_
entry** entries;
int size;
;
typedef struct _table_ table;
我用 calloc 初始化我的表。
void table_init(table* ht, int initial_size)
ht->entries = (entry**)calloc(initial_size, sizeof(entry*));
if (ht->entries)
ht->size = initial_size;
现在我写的免费函数
void table_destroy(htable* ht)
entry *el, *temp;
int i;
for(i = 0; i < ht->size; i++)
el = ht->entries[i];
while(el != NULL)
temp = el;
el = el->next;
free(temp);
free(ht->entries[i]);
free(ht); // <- don't know do i need this.
当我用 valgrind 测试它时,我得到了这个错误
==13560== Invalid free() / delete / delete[] / realloc()
==13560== at 0x4C2BDEC: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13560== by 0x400783: htable_destroy (htable.c:46)
==13560== by 0x400A24: main (main.c:25)
==13560== Address 0xffefffae0 is on thread 1's stack
==13560== in frame #2, created by main (main.c:7)
任何帮助都会很棒,感谢您的宝贵时间!
【问题讨论】:
free(ht->entries);
在循环的末尾。而不是free(ht->entries[i]);
你不一定有一个 NULL 指针数组,所以你知道 ***.com/questions/5857588/… 只是要考虑的事情。
@wildplasser 当然:/ 谢谢!
【参考方案1】:
void table_destroy(htable* ht)
entry *del;
int i;
for(i = 0; i < ht->size; i++)
while( (del = ht->entries[i]) )
ht->entries[i] = del->next;
free(del);
free(ht->entries);
free(ht);
【讨论】:
以上是关于从结构中释放双指针的主要内容,如果未能解决你的问题,请参考以下文章