โ—ผ๏ธŽ ๊ฒฐ๋ก  (summary)

Memory Leak์ด๋ž€?

โ€œ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ free(ํ• ๋‹น ํ•ด์ œ)๋  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋œ ๊ฒƒ.โ€

(๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ freeํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋กœ ๋งŒ๋“  ๊ฒƒ)

Memory Leak, ๋ฌด์—‡์ด ๋ฌธ์ œ์ธ๊ฐ€?

์‹ค๋ฌด์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž์ฃผ, ๋งŽ์ด ํ• ๋‹นํ•œ๋‹จ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด ์‚ฌ์šฉํ•œ ๋’ค ํ•ด์ œ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์† ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๊ณ , ๊ฒฐ๊ตญ ์‹œ์Šคํ…œ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ ธ ์šด์˜์ฒด์ œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ์‹œํ‚ค๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ์‹คํŒจํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โ—ผ๏ธŽ ์ƒ์„ธ

Memory Leak ๋Œ€ํ‘œ์  ์˜ˆ์‹œ

char *a = malloc(20);    // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ a์— ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
char *b = malloc(10);    // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b์— ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

b = a;    // b๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ฃผ์†Œ๊ฐ’์„ a์— ํ• ๋‹น

free(a);  // ํฌ์ธํ„ฐ a์— ํ• ๋‹นํ•œ 20๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ
free(b);  // ํฌ์ธํ„ฐ b์— ํ• ๋‹นํ•œ 10๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ a์— ํ• ๋‹นํ•œ 20๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

// ํฌ์ธํ„ฐ b์— ํ• ๋‹นํ–ˆ๋˜ 10๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น ํ•ด์ œ ๋  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋จ(memory leak ๋ฐœ์ƒ)

๊ฐœ๋ฐœ์ž๊ฐ€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b์— 10๋ฐ”์ดํŠธ ๋ถ„๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด๋†“๊ณ ์„œ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b์—๋‹ค๊ฐ€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ a์— ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋‹ˆ, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b๋Š” ๋”์ด์ƒ 10๋ฐ”์ดํŠธ์งœ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๊ณ  ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ a์™€ ํ•จ๊ป˜ 20๋ฐ”์ดํŠธ์งœ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒํƒœ๋‹ค.

์ด์— ๋”ฐ๋ผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ b์— ํ• ๋‹นํ–ˆ๋˜ 10๋ฐ”์ดํŠธ ๋ถ„๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” free(ํ• ๋‹นํ•ด์ œ)ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋๋‹ค. (memory leak)

์ด๋ฅผ ๋„์‹ํ™” ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

IMG_0944.jpg

free(b)๋ฅผ ํ•ด๋ดค์ž 10๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.

free(b)๋ฅผ ํ•ด๋ดค์ž 10๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.

Memory Leak ์ด๋Ÿฐ์ €๋Ÿฐ ์˜ˆ์‹œ

Memory Leak ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์Šต๊ด€

-๋-