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文字(本文のみ) うざい系実装問題(やるだけ)
© Copyright 2024 ExpyDoc