【发布时间】:2020-09-07 05:21:32
【问题描述】:
我正在尝试构建我自己的小哈希表库来取乐。 (在 C 中)
我希望这对您来说不是太琐碎:由于可能的内存泄漏,我的程序崩溃了。 问题出在我编写的一个函数中,用于在需要时释放分配给表的所有内存。
void destroy_table(struct elem* table, int len){ //releases the memory allocated to the table
int i;
for(i=0; i<len; i++){
struct elem* temp = table+i;
do{
struct elem* e = temp->ptr;
// printf("sono qui!\n");
free(temp->str); // <-- the program crashes here.
free(temp);
temp = e;
}while(temp != NULL);
}}
该表是一个结构元素数组,但可能会发生两个元素具有相同的索引。在这种情况下,会在该元素中构建一个列表。
这是我用来构建数组的结构:
struct elem{
char* str;
struct elem* ptr;};
我已阅读指南,因此我不会发布太多代码。但是我用 str 的所有空字符串和指针的 NULL 值初始化了结构数组。
【问题讨论】:
-
第二次迭代会崩溃吗?
temp不应该在循环块的末尾设置为e->ptr吗? -
是
temp->ptr->strNULL? -
Fiddling Bits 不,它在第一次崩溃。
-
如果您的字符串不是动态分配的,则不应释放它们,例如
free("ciao")会崩溃。 -
您需要一个
while循环而不是do-while循环。
标签: c memory hashtable hash-function