在malloc之后不自由

时间:2013-05-12 13:19:15

标签: c

我在看:

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

并且在程序结束时不会为每个链接列表项调用通知free

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

1 个答案:

答案 0 :(得分:1)

  

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

不,在C语言中它不是free d。程序完成后返回给操作系统,但除非你明确调用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
   }
}