C 如何修复此程序中的内存泄漏

C 如何修复此程序中的内存泄漏,c,C,在下面的程序中,我需要调用哈希表上的free(),列出元素和唯一的单词。我尝试了几件事,但都不是破坏了程序,就是增加了错误信息。一些尝试是在评论和大胆 有人知道在哪里以及如何拨打免费电话吗?因为涉及到指针,所以很容易混淆 h_ptr *htable; int tsize; void new_table(int size) { tsize = size; htable = (h_ptr *) calloc(size, sizeof(h_ptr)); if (!htabl

在下面的程序中,我需要调用哈希表上的free(),列出元素和唯一的单词。我尝试了几件事,但都不是破坏了程序,就是增加了错误信息。一些尝试是在评论和大胆

有人知道在哪里以及如何拨打免费电话吗?因为涉及到指针,所以很容易混淆

h_ptr *htable;
int tsize;


void new_table(int size)
{
    tsize = size;
    htable = (h_ptr *) calloc(size, sizeof(h_ptr));
    if (!htable) {
    fprintf(stderr, "Couldn't allocate hash array, exiting\n");
    exit(1);
    }


    for(int i=0; i<size; i++)
      {
    htable[i]=NULL;
      }
}
h_ptr*htable;
int tsize;
作废新表格(整数大小)
{
tsize=大小;
htable=(h_ptr*)calloc(大小、大小(h_ptr));
如果(!htable){
fprintf(stderr,“无法分配哈希数组,正在退出\n”);
出口(1);
}

对于(int i=0;i防止内存泄漏始终是一样的。如果您已经分配了一些内存,请正确地动态删除它。因此,如果您的函数在某处使用
malloc()
也可以写入
free()
避免内存泄漏的地方

你的问题中有太多的代码。你能试着略读一下吗?我们不是你的调试器,选择一个部分并问一个关于它的特定问题你的问题已经结束了(所以我不能“回答”),但略读你的代码,我知道你做错了什么。有两条经验法则:第一,每次调用
malloc()
应具有对
free()的匹配调用
second按住内存,只要你需要它。你有一个函数,在上面调用malloc,在下面调用free,然后返回指针。不,那很糟糕。你把指针传递给调用者,然后调用者在完全完成后释放它。是的,但每次我尝试它,它要么会中断程序,要么会给我更多内存泄漏错误(使用Valgrind)。我不确定在何处调用free以及使用什么语法作为指针。我们正在对哈希表、列表元素和唯一词调用free()。例如,我在何处释放“result”变量?指针应该作为free的参数传递。它可以是指向任何东西的指针。实际上原型是free(void*)是的,我尝试了“free((void*)htable”);(最后一行,它增加了更多的内存泄漏。)