Memory 使用free解决内存泄漏

Memory 使用free解决内存泄漏,memory,memory-leaks,malloc,free,Memory,Memory Leaks,Malloc,Free,我正在努力消除以下程序中的内存泄漏 int main (int argc, char **argv) { node_ref head = NULL; for (int argi = 0; argi < 5; ++argi) { node_ref node = malloc (sizeof (struct node)); assert (node != NULL); node->word = argv[argi]; node-

我正在努力消除以下程序中的内存泄漏

int main (int argc, char **argv) {
   node_ref head = NULL;
   for (int argi = 0; argi < 5; ++argi) {
      node_ref node = malloc (sizeof (struct node));
      assert (node != NULL);
      node->word = argv[argi];
      node->link = head;
      head = node;
   }
   for (node_ref curr = head; curr->link != NULL; curr = curr->link) {
      printf ("%p->node {word=%p->[%s], link=%p}\n",
              curr, curr->word, curr->word, curr->link);
   }
   while(head != NULL){
   struct node* temp;
   temp = head;
   head++;
   free(temp);
   }
   return 9;
}
int main(int argc,char**argv){
node_ref head=NULL;
对于(int argi=0;argi<5;++argi){
node_ref node=malloc(sizeof(struct node));
断言(节点!=NULL);
node->word=argv[argi];
节点->链接=头部;
头部=节点;
}
对于(节点\u ref curr=head;curr->link!=NULL;curr=curr->link){
printf(“%p->node{word=%p->[%s],link=%p}\n”,
当前,当前->单词,当前->单词,当前->链接);
}
while(head!=NULL){
结构节点*temp;
温度=水头;
head++;
免费(临时);
}
返回9;
}

然而,当我运行valgrind时,它会因为内存泄漏而变得疯狂,你知道我做错了什么吗?

你在循环中分配内存,这会导致多个内存区域。看起来应该在循环之前调用malloc()

编辑:


再看一遍,我认为释放内存的第二个循环是不正确的。您使用
head++递增而不是设置
head=temp->link
假设
malloc
将为您提供连续的内存段是不正确的。

free
循环中,您使用
head++
,这将给您带来垃圾。你想要
head=head->link

我同意。你应该在循环之外运行你的空闲时间(temp)。你是对的。我只是在同一时间把同样的东西放在我的答案里。我不是想重复你的答案…伟大的人都有相同的想法!