도입

메모리 누수가 있는 프로그램은

메모리 누수가 있는 프로그램은 여러가지 문제를 만듭니다. 예상치 못한 메모리 누수로, 가동 시간이 길어질 수록 더 많은 램을 잡고 놓아주지 않는 프로그램은 램 가용율 뿐 아니라 보안에도 큰 영향을 미칠 수 있습니다.

어떤 운영체제는 프로세스가 종료되면

어떤 운영체제들은 프로세스가 종료되면 자동으로 사용중인 메모리를 모두 모아 반환하는 기능을 가지고 있어서 메모리 누수가 발생하더라도 프로세스가 종료되면 새어나간 메모리가 반환되지만, 이 기능만을 믿고 할당한 메모리를 제대로 반환하지 않는 프로그램을 작성한다면, 해당 기능이 없는 OS에서는 프로그램을 정상적으로 사용할 수 없습니다. 이 프로그램은 OS의 해당 기능에 종속되어 있다고 생각할 수도 있겠습니다.

메모리 누수를 막기 위해서는

메모리 누수를 막기 위해서는 빌려서 사용한 메모리 공간을 free 함수를 이용해 반환 해 주어야 합니다. 필요할 때 할당해서 잘 쓰고, 함수가 끝나기 전에, 또는 프로그램이 종료되기 전에 free 함수를 호출해 주기만 하면 됩니다. 매우 간단하지요?

할당해제를 복잡하게 만드는 요소가 있는데

이 간단한 규칙을 복잡하게 만드는 요소가 있는데, 바로 스코프와 분기문입니다.

예를 들어

main 함수는 a함수를 호출하고, a 함수는 b 함수를 호출합니다.

main 은 a함수를 호출하기 전에 m에 메모리를 할당합니다.

int main(void)
{
	...

	m = malloc(sizeof(int) * 3);
	if (m == 0)
		return(1);

	... 

	temp = a(var1, var2);

	...
}
int a(int v1, int v2)
{
	...

	b(var3, var4);
	...
}