【问题标题】:Not free'ing after malloc [duplicate]在 malloc 之后没有释放 [重复]
【发布时间】:2013-05-06 15:28:42
【问题描述】:

我在看:

http://www.macs.hw.ac.uk/~rjp/Coursewww/Cwww/linklist.html

注意free 不会在每个链表项的程序结束时调用。

问题:malloc'd 内存会在程序结束时自动free'd 吗?

【问题讨论】:

  • 我认为内存在程序结束时被释放,因为一旦进程终止,它的所有结构和内存位置都应该被释放。

标签: c


【解决方案1】:

malloc'd 内存是否在程序结束时自动free'd?

不,它不是 C 语言意义上的 freed。当程序结束时,它会返回给操作系统,但除非你显式调用free,否则它就是内存泄漏。

您可以按如下方式修复内存泄漏:

void main() {
   item * curr, * head;
   int i;

   head = NULL;

   for(i=1;i<=10;i++) {
      curr = (item *)malloc(sizeof(item));
      curr->val = i;
      curr->next  = head;
      head = curr;
   }

   curr = head;

   while(curr) {
      void *toFree = curr;
      printf("%d\n", curr->val);
      curr = curr->next ;
      free(toFree); // <<<== Add this
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多