๐โ๏ธ Activities/42 Cursus
[C] Memory Leak
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 ๋ฑ)์ ๋จ์ ์ ์๋ค.