2

次のプログラムでメモリリークを解消しようとしています

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 を実行すると、メモリ リークが発生しておかしくなります。

4

2 に答える 2

1

ループ内でメモリを割り当てているため、複数のメモリ領域ができています。代わりに、ループの前に malloc() を呼び出す必要があるようです。

編集:

これをもう一度見てみると、メモリを解放する 2 番目のループが間違っていると思います。head++;設定ではなくインクリメントしています連続したメモリセグメントが得られるhead = temp->link; と仮定するのは正しくありません。malloc

于 2012-11-08T22:59:37.900 に答える
0

freeループでは、 which を使用するhead++とゴミが発生します。あなたがしたいhead = head->link

于 2012-11-08T23:09:27.940 に答える