回答編集履歴

2

イメージを追加

2018/10/22 06:15

投稿

退会済みユーザー
test CHANGED
@@ -33,3 +33,13 @@
33
33
  - dlistってdlnode*ですよね。ノードだと思うんですが、それを解放しちゃっていいのか?というのがfree(d2)の悪そうな点です。
34
34
 
35
35
  - delete()は、その前に接続しなおしの処理があるのに、あらためてやることあるのかな?というのが悪そうな点です。
36
+
37
+
38
+
39
+ ###変数やメンバ変数と、その中身のイメージ
40
+
41
+ きったない絵であれですが。
42
+
43
+
44
+
45
+ ![イメージ説明](2cf10d32db26d14224c6badab18400c6.png)

1

コメントを追加しました。

2018/10/22 06:15

投稿

退会済みユーザー
test CHANGED
@@ -12,11 +12,17 @@
12
12
 
13
13
  void delete(dllist p) {
14
14
 
15
- p->prev->next = p->next;
15
+ p->prev->next = p->next; // (4のノード).next = (3のノード)
16
16
 
17
- p->next->prev = p->prev;
17
+ // つまり、 (2)(4)(1)(3) が、(2)←→(4)←→(3) となります。
18
18
 
19
+ // ↑ ↑
20
+
21
+ // (1)---┘
22
+
23
+ p->next->prev = p->prev; // ここもおかしくなります。
24
+
19
- free(p);
25
+ free(p); // (1のノード)のメモリを解放する
20
26
 
21
27
  }
22
28