使用免费解决记忆泄漏



我正在尝试消除以下程序中的内存泄漏

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;
}

但是,当我运行valgrind时,它会随着内存泄漏而疯狂,这对我做错了什么?

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

编辑:

再次查看了此内容后,我认为释放内存的第二个循环是不正确的。您正在使用head++;而不是设置head = temp->link;,假设malloc会为您提供连续的内存段是不正确的。

在您的 free循环中,您使用的是head++,它将为您提供垃圾。您想要head = head->link

相关内容

  • 没有找到相关文章

最新更新