【问题标题】:Solving memory leaks using free使用 free 解决内存泄漏
【发布时间】:2012-11-08 22:56:01
【问题描述】:

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

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 时,它会因内存泄漏而发疯,你知道我做错了什么吗?

【问题讨论】:

    标签: memory memory-leaks malloc free


    【解决方案1】:

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

    编辑:

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

    【讨论】:

    • 我同意。你应该在循环之外运行你的 free(temp)。
    【解决方案2】:

    在您的free 循环中,您使用head++ 这会给您带来垃圾。你要head = head-&gt;link

    【讨论】:

    • 你是对的。我只是同时在我的答案中加入了同样的内容。我不是故意重复你的答案...伟大的思想都一样!
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2015-06-28
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2021-03-23
    相关资源
    最近更新 更多