1

私は見ています:

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

freeリンクされたリスト項目ごとに、プログラムの最後に通知が呼び出されません。

質問: malloc'd メモリfreeは、プログラムの最後に自動的に 'd されますか?

4

1 に答える 1

1

malloc されたメモリfreeは、プログラムの最後に自動的に 'd されますか?

いいえ、freeC の意味での 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
   }
}
于 2013-05-12T13:21:42.163 に答える