0=2. 2025. 6. 4. 01:56

๋ฉ”๋ชจ๋ฆฌ ๋ฆญ(Memory Leak)

๋™์ ์œผ๋กœ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•„์„œ, ๋” ์ด์ƒ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์ฐจ์ง€ํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค.

malloc, calloc, realloc ๋“ฑ์œผ๋กœ ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด๋†“๊ณ , ๋‚˜์ค‘์— free()๋กœ ํ•ด์ œํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ฐจ์ง€ํ•˜๊ณ  ๋‚จ์•„ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ๊ทธ ์ฃผ์†Œ๋ฅผ ์žƒ์–ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ์“ธ ์ˆ˜๋„ ์—†๊ณ  ๋Œ๋ ค์ค„ ์ˆ˜๋„ ์—†๋Š” ์œ ๋ น ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์˜ˆ์‹œ

char *str = malloc(100); // 100๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

// str์— ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•ด์ง€๊ฑฐ๋‚˜
str = NULL; // ์›๋ž˜ ํ• ๋‹น๋œ 100๋ฐ”์ดํŠธ๋Š” ๋” ์ด์ƒ ์ ‘๊ทผ ๋ถˆ๊ฐ€

// ํ˜น์€
return; // ํ•จ์ˆ˜๊ฐ€ ๋๋‚ฌ๋Š”๋ฐ๋„ free()๋ฅผ ์•ˆ ํ•จ

 

๋ฌธ์ œ

  • ๋ฐ˜๋ณตํ•  ์ˆ˜๋ก ์ ์  ๋А๋ ค์ง„๋‹ค. ํ•ด์ œ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ณ„์† ์Œ“์—ฌ์„œ ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๋ฒ„๋ฒ…์ธ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ํ›„์—๋„ ๋ฆญ์ด ์กด์žฌํ•œ๋‹ค. OS๊ฐ€ ๋Œ€๋ถ€๋ถ„ ํšŒ์ˆ˜ํ•˜์ง€๋งŒ, ์ผ๋ถ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฆฌ์†Œ์Šค๋‚˜ ์™ธ๋ถ€ ์ž์›(socket, file ๋“ฑ)์€ ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค.