首页 > 解决方案 > C 可能的内存泄漏?崩溃

问题描述

我正在尝试构建自己的小哈希表库来取乐。(在 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 的所有空字符串和指针的 N​​ULL 值初始化了结构数组。

标签: cmemoryhashtablehash-function

解决方案


我好像你正在用这样的字符串文字初始化你的 char* :

char *str = "";

C 中的字符串文字不是从堆中分配的,它们在程序中获得自己的内存空间,并在整个程序生命周期内保持在那里,即使str超出范围也是如此。

这就是为什么您不应该尝试释放char*作为字符串文字的 a 的原因。相反,您应该初始化您的strtoNULL并根据需要在堆上分配它们。然后,您可以使用strcpy填充您的字符串。


推荐阅读