Time Limit: 8 sec / Memory Limit: 64 MB
ã‚ãªãŸã®ç ”究室ã®åŒæœŸãŒ, 実装ä¸ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®ãƒã‚°ã«æ‚©ã¾ã•ã‚Œã¦ã„ãŸ. å½¼ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯, ã‹ãªã‚Šä¸‹ä½ã®ãƒ¬ã‚¤ãƒ¤ã§å‹•ä½œã™ã‚‹ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã‚ã‚‹ãŸã‚, 高機能ã®ãƒ‡ãƒãƒƒã‚¬ã‚„テストツールãªã©ã¯ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ããªã„. OS ã«ã‚ˆã‚‹è£œåŠ©ãŒãªã„環境ã§ã‚ã‚‹ãŸã‚, 言語上使ãˆã‚‹ã¯ãšã®ä¾‹å¤–処ç†ãªã©ä½¿ãˆãªã„ã—, 標準ライブラリã§ã™ã‚‰å¤§åŠã®ã‚‚ã®ãŒä½¿ç”¨ã§ããªã„. ガベージコレクタãªã‚“ã¦å¤¢ã®ã¾ãŸå¤¢ã§ã‚ã‚‹. ãã®ãŸã‚å½¼ã¯, ã“ã‚Œã¾ã§ãƒˆãƒ©ã‚¤ã‚¢ãƒ«ã‚¢ãƒ³ãƒ‰ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã£ã¦è‡ªåŠ›ã§æ¤œè¨¼ã‚’è¡Œã„, ä¿®æ£ã‚’è¡Œã£ã¦ããŸ. ã—ã‹ã—, 今回ã®ãƒã‚°ã¯ç›¸å½“æ ¹ãŒæ·±ã„らã—ã, å½¼ã¯ã‚‚ã†ä¸€ãƒ¶æœˆè¿‘ãã«æ¸¡ã‚Šæ¤œè¨¼ã‚’ç¹°ã‚Šè¿”ã—ã¦ã„ãŸ. ç· åˆ‡ã¾ã§ã«ã“ã®ãƒã‚°ãŒä¿®æ£ã§ããªã‹ã£ãŸãŸã‚, å½¼ã¯è«–æ–‡æ出を見é€ã£ã¦ã„ã‚‹. 夜ä¸ã®ç ”究室ã«ã¯, æ–続的ã«å½¼ã®å¥‡å£°ãŒèžã“ãˆã¦ã„る始末ã§ã‚ã‚‹. 見兼ããŸã‚ãªãŸã¯, å½¼ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æ¤œè¨¼ã‚’手ä¼ã†ã“ã¨ã«ã—ãŸ.
ã“ã‚Œã¾ã§ã®å½¼ã®ãŒã‚“ã°ã‚Šã«ã‚ˆã£ã¦, プãƒã‚°ãƒ©ãƒ ã§ã¯ã„ã‚ゆるメモリリークãŒç™ºç”Ÿã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒé«˜ã„らã—ã„. ã©ã†ã‚„らプãƒã‚°ãƒ©ãƒ ã®ã©ã“ã‹ã§, 確ä¿ã—ãŸãƒ¡ãƒ¢ãƒªã‚’解放ã—忘れã¦ã„ã‚‹ã“ã¨ãŒåŽŸå› ã§, 使用ã§ãるメモリを使ã„æžœãŸã—ã¦ã—ã¾ã£ã¦ã„るよã†ã§ã‚ã‚‹. å½¼ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¯ãã®ã¾ã¾ã§ã¯è¤‡é›‘ã™ãŽã‚‹ã®ã§, å½¼ã¯ãƒ¡ãƒ¢ãƒªã®ç¢ºä¿ã‚„解放を行ã†å‡¦ç†ã‚’ç°¡å˜ã«è¡¨ç¾ã—, パターン化ã—ãŸã‚‚ã®ã‚’用æ„ã—ã¦ãã‚ŒãŸ. ã“ã®ãƒ‘ターンã”ã¨ã«ã©ã®ç¨‹åº¦ãƒ¡ãƒ¢ãƒªãƒªãƒ¼ã‚¯ãŒç™ºç”Ÿã™ã‚‹ã‹ã‚’調ã¹ã¦æ¬²ã—ã„ã¨ã®ã“ã¨ã§ã‚ã‚‹.
ã¾ãšå‰æã¨ã—ã¦, å½¼ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã§ã¯, メモリマãƒãƒ¼ã‚¸ãƒ£ã¨ã„ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã«ã‚ˆã£ã¦, ãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ç¢ºä¿ã‚„解放ã¨ã„ã£ãŸæ©Ÿèƒ½ãŒæä¾›ã•ã‚Œã¦ã„るらã—ã„. ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’ç¢ºä¿ã™ã‚‹ã¨ã¯, æ£ç¢ºã«ã¯ãƒ¡ãƒ¢ãƒªãƒžãƒãƒ¼ã‚¸ãƒ£ãŒç®¡ç†ã™ã‚‹ãƒ’ープã¨å‘¼ã°ã‚Œã‚‹ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‹ã‚‰, å¿…è¦ãªåˆ†ã‚’借りå—ã‘, ãã®é ˜åŸŸã¸ã®ã€Œå‚ç…§ã€ã‚’å¾—ã‚‹ã“ã¨ã§ã‚ã‚‹. ãªãŠ, ヒープã«ã¯ä¸Šé™ãŒã‚ã‚Š, プãƒã‚°ãƒ©ãƒ ã‹ã‚‰ãれ以上ã®ãƒ¡ãƒ¢ãƒªã¯åˆ©ç”¨ã§ããªã„. ãƒ¡ãƒ¢ãƒªé ˜åŸŸã®å¤§ãã•ã«ã¯ã€Œãƒã‚¤ãƒˆã€ãŒç”¨ã„られる.
「å‚ç…§ã€ã¨ã¯, ãã®é ˜åŸŸãŒå˜åœ¨ã™ã‚‹å ´æ‰€ã‚’示ã™å€¤ã§ã‚ã‚‹. å‚ç…§ã¯, 変数ã«ä»£å…¥ã™ã‚‹ã‹, 直接別ã®ãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ç¢ºä¿ã‚„解放ã®æ©Ÿèƒ½ã¸æ¸¡ã™å¼•æ•°ã¨ã—ã¦åˆ©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã‚‹. ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’è§£æ”¾ã™ã‚‹ã¨ã¯, 使ã‚ãªããªã£ãŸãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’メモリマãƒãƒ¼ã‚¸ãƒ£ã«è¿”å´ã™ã‚‹ã“ã¨ã§ã‚ã‚‹.
ãã—ã¦, å½¼ã®ç”¨æ„ã—ãŸãƒ‘ターンã¯ä»¥ä¸‹ã® BNF ã§è¡¨ç¾ã§ãã‚‹ã‚‚ã®ã§ã‚ã£ãŸ.
<line> ::= <expr> | <free> <expr> ::= "(" <expr> ")" | <assign> | "NULL" | <variable> | <malloc> | <clone> <assign> ::= <variable> "=" <expr> <malloc> ::= "malloc(" <number> ")" <free> ::= "free(" <expr> ")" <clone> ::= "clone(" <expr> ")" <variable> ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" <number> ::= <non_zero_digit> | <number> <digit> <non_zero_digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" <digit> ::= "0" | <non_zero_digit>
変数(variables)ã¯, å‚ç…§ã®å…¥ã‚Œç‰©ã¨ã¦æ©Ÿèƒ½ã—, åå‰ã¨ã—ã¦ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã®å¤§æ–‡å—一文å—を使用ã§ãã‚‹. 変数ã¯, 今回å•é¡Œã¨ãªã‚‹ãƒ’ープã¨ã¯åˆ¥ã®é ˜åŸŸã«ç¢ºä¿ã•ã‚Œã‚‹ãŸã‚, 変数ãã®ã‚‚ã®ãŒä½¿ç”¨ã™ã‚‹ãƒ¡ãƒ¢ãƒªé‡ã‚’æ°—ã«ã™ã‚‹å¿…è¦ã¯ãªã„. ãªãŠ, 変数ã¯æ˜Žç¤ºçš„ã«å€¤ã‚’代入ã•ã‚Œãªã„é™ã‚Š, æ›´æ–°ã•ã‚Œãªã„. ã¾ãŸ, åˆæœŸå€¤ã¯ç‰¹ã«æ±ºã¾ã£ã¦ãŠã‚‰ãš, ã©ã®ã‚ˆã†ãªå€¤ã‚’æŒã£ã¦ã„ã‚‹ã‹ã‚ã‹ã‚‰ãªã„ã“ã¨ã«æ³¨æ„ã—ãªã‘ã‚Œã°ãªã‚‰ãªã„. ãªãŠ, 変数ã¯è©•ä¾¡çµæžœã¨ã—ã¦, ãã®å¤‰æ•°ã®æŒã¤å‚照を返ã™.
代入(assign)ã¯, å‚ç…§ã®å€¤ã‚’コピーã™ã‚‹. å³è¾ºã®å¼ã‚’評価ã—ã¦å¾—られるå‚照を左辺ã®å¤‰æ•°ã«ã‚³ãƒ”ーã™ã‚‹. åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„変数や free ã•ã‚ŒãŸå¤‰æ•°ã‚‚代入ã™ã‚‹ã“ã¨ãŒã§ãã‚‹. ã“ã‚Œã¯, å‚ç…§ã¨ã¯é ˜åŸŸã®å ´æ‰€ã‚’示ã™ã€Œå€¤ã€ã§ã—ã‹ãªã„ãŸã‚, 別ã®å¤‰æ•°ã«ä»£å…¥ã—ã¦ã‚‚, 実際ã«æ„図ã—ãªã„é ˜åŸŸã‚’æ“作ã—ã¦ã—ã¾ã†ã“ã¨ã¯ãªã„. ãªãŠ, 代入ãã®ã‚‚ã®ã¯, 変数ã«ä»£å…¥ã•ã‚ŒãŸå‚照を返ã™.
malloc, free, clone ã¯, メモリマãƒãƒ¼ã‚¸ãƒ£ã®æ©Ÿèƒ½ã‚’呼ã³å‡ºã¦ã„ã‚‹ã“ã¨ã‚’示ã—ã¦ã„ã‚‹.
ãªãŠ, malloc ã‚„ clone ã®ãƒ¡ãƒ¢ãƒªç¢ºä¿ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ 自体ã¯ç²¾éŒ¬ã•ã‚Œã¦ã„ã‚‹ãŸã‚, 割り当ã¦ç”¨ã®ãƒ¡ãƒ¢ãƒªé ˜åŸŸãŒæ–片化ã™ã‚‹ã“ã¨ã¯ãªã„. ã¾ãŸ, free ã—ãŸé ˜åŸŸã¯å³åº§ã«è§£æ”¾ã•ã‚Œ, å†åˆ©ç”¨å¯èƒ½ã«ãªã‚‹. ãŸã ã—, åˆæœŸåŒ–ã•ã‚Œã¦ã„ãªã„é ˜åŸŸã‚„æ—¢ã« free ã•ã‚ŒãŸé ˜åŸŸã«å¯¾ã—㦠clone ã‚„ free ã—ãŸå ´åˆ, æ„図ã—ãªã„ãƒ¡ãƒ¢ãƒªé ˜åŸŸã«å¯¾ã—ã¦ã‚³ãƒ”ーや解放ãŒè¡Œãªã‚ã‚Œã¦ã—ã¾ã„, 何ãŒèµ·ã“ã‚‹ã‹ã‚ã‹ã‚‰ãªã„. ã“ã®ã‚ˆã†ãªå‹•ä½œã¯, 別ã®ãƒã‚°ã®åŽŸå› ã¨ãªã£ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚, å½¼ã«çŸ¥ã‚‰ã›ã‚‹å¿…è¦ãŒã‚ã‚‹. 与ãˆã‚‰ã‚ŒãŸãƒ¡ãƒ¢ãƒªã®ä¸Šé™è¶…ãˆã¦ malloc ã—よã†ã¨ã—ãŸå ´åˆã«ã¯, NULL ã¨ã„ã†ç‰¹æ®Šãªå‚ç…§ãŒè¿”ã•ã‚Œã‚‹. åŒæ§˜ã« clone ã§ã‚³ãƒ”ーã•ã‚Œã‚‹é ˜åŸŸåˆ†ã®ãƒ¡ãƒ¢ãƒªãŒæ®‹ã£ã¦ã„ãªã„å ´åˆã«ã‚‚, NULL ãŒè¿”ã•ã‚Œã‚‹.
ã“ã® NULL ã¯ç‰¹å®šã®ãƒ¡ãƒ¢ãƒªé ˜åŸŸã‚’å‚ç…§ã—ã¦ã„ãªã„ã“ã¨ã‚’示ã™. 通常ã®å‚ç…§ã¨åŒæ§˜ã« NULL ã¯å¤‰æ•°ã«ä»£å…¥ã§ã, å‚照を引数ã«ã¨ã‚‹ clone ã‚„ free ã«æ¸¡ã™ã“ã¨ãŒã§ãã‚‹. ãŸã ã—, free ã« NULL を引数ã§æ¸¡ã—ã¦ã„ãŸå ´åˆ, 何も起ã“らãªã„ã“ã¨ãŒä¿è¨¼ã•ã‚Œã¦ã„ã‚‹. ã¾ãŸ, clone ã« NULL を引数ã§æ¸¡ã—ãŸå ´åˆã§ã‚‚, 何も起ã“らãš, NULL ãŒè¿”ã•ã‚Œã‚‹.
評価ã™ã‚‹ã¨å‚照を返ã™å¼(expr)ã¯, "(" ")" を使ã†ã“ã¨ã§å…¥ã‚Œåã«ã™ã‚‹ã“ã¨ãŒã§ãã‚‹. ã“ã®å ´åˆ, "(" ")"ã®å†…部ã®è©•ä¾¡çµæžœãŒãã®å¤–å´ã¸è¿”ã•ã‚Œã‚‹ã“ã¨ã«ãªã‚‹. ãªãŠ, free ã¯å‚照を返ã•ãªã„ã®ã§, 入れåã«ã™ã‚‹ã“ã¨ãŒã§ããªã„.
ã‚ãªãŸã®ä»•äº‹ã¯, パターンã¨ã—ã¦ä¸Žãˆã‚‰ã‚ŒãŸå…¨ã¦ã®è¡Œã‚’実行ã—ãŸå¾Œã«, å‚ç…§ã•ã‚Œã¦ã„ãªã„確ä¿æ¸ˆã¿ã®ãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ãƒã‚¤ãƒˆæ•°ã®åˆè¨ˆã‚’計算ã™ã‚‹ã“ã¨ã§ã‚ã‚‹. ãªãŠ, 与ãˆã‚‰ã‚ŒãŸå…¨ã¦ã®è¡Œã‚’実行ã—ãŸå¾Œã«, 一ã¤ä»¥ä¸Šã®å¤‰æ•°ãŒå‚照をæŒã£ã¦ã„ã‚‹é ˜åŸŸã«ã¤ã„ã¦ã¯æ°—ã«ã—ãªãã¦ã‚ˆã„. ã¾ãŸ, 別ã®ãƒã‚°ã®åŽŸå› を発見ã—ãŸå ´åˆã«ã¯, å½¼ã«çŸ¥ã‚‰ã›ãªã‘ã‚Œã°ãªã‚‰ãªã„.
ã‚ãªãŸã¯, パターンã®åˆ†æžã‚’ã™ã‚‹ãŸã‚ã®ãƒ—ãƒã‚°ãƒ©ãƒ を組むã“ã¨ã—ãŸ. ãã®ãŸã‚ã«, å½¼ã®ç¤ºã™ã„ãã¤ã‹ã®ãƒ‘ターンã«ã¤ã„ã¦è€ƒå¯Ÿã—ãŸ.
|
|
図1ã¯, ヒープ㌠100 ãƒã‚¤ãƒˆå˜åœ¨ã™ã‚‹çŠ¶æ…‹ã§, 以下ã®ã‚ˆã†ãªãƒ‘ターンを実行ã—ãŸã¨ãã®çŠ¶æ…‹ã®é·ç§»ã‚’示ã—ã¦ã„ã‚‹
A=malloc(10) B=clone(A) free(A)
ã¾ãš, 1行目ã§ã¯, malloc ã«ã‚ˆã£ã¦ 10 ãƒã‚¤ãƒˆã®é ˜åŸŸã‚’確ä¿ã—, ãã®é ˜åŸŸã¸ã®å‚照を変数 A ã«ä»£å…¥ã—ã¦ã„ã‚‹. 残りã®ä½¿ç”¨å¯èƒ½ãªãƒ’ープã¯, 90 ãƒã‚¤ãƒˆã¨ãªã‚‹ 次ã«, 2行目ã§ã¯, å…ˆã»ã©ç¢ºä¿ã—ãŸé ˜åŸŸã¸ã®å‚照をæŒã¤å¤‰æ•° A ã‚’ clone ã«æ¸¡ã—ã¦ã„ã‚‹. ã“ã‚Œã«ã‚ˆã‚Š, æ–°ãŸã«10ãƒã‚¤ãƒˆã®é ˜åŸŸãŒç¢ºä¿ã•ã‚Œ, 残りã®ä½¿ç”¨å¯èƒ½ãªãƒ’ープã¯, 80 ãƒã‚¤ãƒˆã¨ãªã‚‹. æ–°ãŸã«ç¢ºä¿ã•ã‚ŒãŸ 10 ãƒã‚¤ãƒˆã®é ˜åŸŸã¸ã®å‚ç…§ã¯, 変数 B ã«ä»£å…¥ã•ã‚Œã‚‹. ãã—ã¦, 3行目ã§ã¯, 1行目ã§ç¢ºä¿ã•ã‚ŒãŸé ˜åŸŸã¸ã®å‚照をæŒã¤å¤‰æ•° A ã‚’ free ã«æ¸¡ã—ã¦ã„ã‚‹. ã“ã‚Œã«ã‚ˆã‚Š, 10ãƒã‚¤ãƒˆã®é ˜åŸŸãŒè§£æ”¾ã•ã‚Œ, 残りã®ä½¿ç”¨å¯èƒ½ãªãƒ’ープã¯, 90 ãƒã‚¤ãƒˆã¨ãªã‚‹. 以上ã§, ã“ã®ãƒ‘ターンã®å®Ÿè¡Œã¯çµ‚了ã§ã‚ã‚‹. ã“ã®å ´åˆã§ã¯, å‚ç…§ã•ã‚Œã¦ã„ãªã„確ä¿æ¸ˆã¿ã®é ˜åŸŸã¯å˜åœ¨ã—ãªã„ãŸã‚, 検証ã®çµæžœã¯ 0 ãƒã‚¤ãƒˆã¨ãªã‚‹. 2行目ã§ç¢ºä¿ã•ã‚ŒãŸ 10 ãƒã‚¤ãƒˆã®é ˜åŸŸã¯, 変数 B ãŒå‚照をæŒã£ã¦ã„ã‚‹ãŸã‚, メモリリークã¨ã—ã¦æ‰±ã‚ãªã„. ã¾ãŸ, 変数 A ã¯3行目㧠free ã«æ¸¡ã•ã‚ŒãŸå¾Œ, 代入ã«ã‚ˆã£ã¦æ›´æ–°ã•ã‚Œã¦ã„ãªã„. ãã®ãŸã‚, ã“ã®æ™‚点ã§ã‚‚å…ˆã»ã©è§£æ”¾ã•ã‚ŒãŸé ˜åŸŸã¸ã®å‚照をæŒã£ãŸã¾ã¾ã§ã‚ã‚‹. ã‚‚ã—ã“ã®å¾Œã«, ã“ã®é ˜åŸŸã‚’ free ã‚ã‚‹ã„㯠clone ã™ã‚‹ã‚ˆã†ãªå‘½ä»¤ãŒã‚ã£ãŸå ´åˆã¯, 検証çµæžœã¨ã—㦠Error を出力ã™ã‚‹å¿…è¦ãŒã‚ã‚‹.
|
|
図2ã¯, ヒープãŒ100å˜åœ¨ã™ã‚‹çŠ¶æ…‹ã§, 以下ã®ã‚ˆã†ãªãƒ‘ターンを実行ã—ãŸã¨ãã®çŠ¶æ…‹ã®é·ç§»ã‚’示ã—ã¦ã„ã‚‹
A=clone(clone(malloc(10)))
ã“ã®å ´åˆã¯, ã¾ãš malloc(10) ãŒå®Ÿè¡Œã•ã‚Œ, 10ãƒã‚¤ãƒˆã®é ˜åŸŸãŒç¢ºä¿ã•ã‚Œã‚‹. ã“ã®é ˜åŸŸã¸ã®å‚ç…§ã¯ãã®ã¾ã¾ clone ã«æ¸¡ã•ã‚Œ, ã•ã‚‰ã« 10ãƒã‚¤ãƒˆã®é ˜åŸŸãŒç¢ºä¿ã•ã‚Œã‚‹. ã“ã® clone ã«ã‚ˆã£ã¦ç¢ºä¿ã•ã‚ŒãŸé ˜åŸŸã‚‚外å´ã® clone ã«æ¸¡ã•ã‚Œ, ã•ã‚‰ã«10ãƒã‚¤ãƒˆã®é ˜åŸŸãŒç¢ºä¿ã•ã‚Œã‚‹. 最後ã«ç¢ºä¿ã•ã‚ŒãŸé ˜åŸŸã¸ã®å‚ç…§ãŒå¤‰æ•° A ã«ä»£å…¥ã•ã‚Œã‚‹. 最åˆã® malloc ã§ç¢ºä¿ã•ã‚ŒãŸé ˜åŸŸã‚„内å´ã® clone ã§ç¢ºä¿ã•ã‚ŒãŸé ˜åŸŸã¯, ã©ã®å¤‰æ•°ã‚‚å‚照をæŒã£ã¦ãŠã‚‰ãš, 解放ã™ã‚‹ã“ã¨ãŒã§ããªããªã£ã¦ã—ã¾ã†. よã£ã¦, ã“ã®ãƒ‘ターンã®æ¤œè¨¼çµæžœã¯ 20 ãƒã‚¤ãƒˆã¨ãªã‚‹.
入力ã¯ä»¥ä¸‹ã®å½¢å¼ã§ä¸Žãˆã‚‰ã‚Œã‚‹ï¼Ž
M line1 line2 line3 ... linei ...
入力ã®å½¢å¼ã§ç”¨ã„られる変数ã®æ„味ã¯æ¬¡ã®é€šã‚Šã§ã‚る.
入力ã§ä¸Žãˆã‚‰ã‚ŒãŸå…¨ã¦ã®è¡Œã‚’実行ã—ãŸå¾Œã«, å‚ç…§ã•ã‚Œã¦ã„ãªã„確ä¿æ¸ˆã¿ã®ãƒ¡ãƒ¢ãƒªé ˜åŸŸã®ãƒã‚¤ãƒˆæ•°ã®åˆè¨ˆã‚’出力ã›ã‚ˆ. メモリリーク以外ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã„ãŸå ´åˆã«ã¯, "Error" ã¨å‡ºåŠ›ã›ã‚ˆ.
100 A=malloc(10) B=clone(A) free(A)
0
100 A=clone(clone(malloc(10)))
20
30 clone(clone(clone(clone(malloc(10)))))
30
100 free(A) A=malloc(12) NULL N=clone(NULL)
Error