clone(A)

D: Memory Leak
作問者: @epee_noir
テスター: @Respect2D, @slip0110
……ナニコレ?

作問者の怨嗟思い付きによって作られた問題
 コンセプト:
うざい実装問題
 文字数: 約4800文字(本文のみ)

C言語の malloc/free, ポインタ風の構文を
解析する
はこの辺に苦労した覚えがあるはず
 純 Java-er や低回生にはつらかったかもしれま
せん
(すいません……)
 C-er
解答例

@Respect2D
 190行,

3058 byte (C++)
@slip0110
 305行,
7253 byte (Java)
A=malloc(10)
malloc
残りのメモリ:
10
100 → 90
A
参照
コピー
B=clone(A)
clone
残りのメモリ:
10
90 → 80
A
10
参照
free(A)
B
free
残りのメモリ:
80 → 90
A
参照
10
参照
B
参照
残りのメモリ:
90
A
10
参照
B
参照
A はまだ free された
領域への参照を持ってい
る!
free(A)
free
残りのメモリ:
90
Error
A
10
参照
B
clone(A)
残りのメモリ:
90
A
参照
clone
10
Error
参照
B
参照
残りのメモリ:
90
A
10
参照
B
参照
A はまだ free された
領域への参照を持ってい
る!
C=A
残りのメモリ:
90
A
10
参照
B
C
参照
代入はOK
参照
残りのメモリ:
100
A
参照
B
参照
初期状態でも, 変数はどこかへ
の参照を持っている(かも)
free(A)
free
残りのメモリ:
100
Error
A
参照
clone(A)
残りのメモリ:
100
A
B
参照
B
参照
clone
Error
参照
A=clone(clone(malloc(10)))
malloc
残りのメモリ:
10
100 → 90
A=clone(clone(malloc(10)))
コピー
clone
残りのメモリ:
10
90 → 80
10
コピー
clone
A=clone(clone(malloc(10)))
残りのメモリ: 10
80 → 70
10
これらの領域は参照されていない!
10
A
参照
malloc
free
size
size
コピー
clone
size
size
……ナニコレ?

作問者の怨嗟思い付きによって作られた問題
には覚えがあるはず
 闇の軍団 C++-er には怒られそう
 C-er
文字数: 約4800文字(本文のみ)
 うざい系実装問題(やるだけ)
