메모리 누수

컴퓨터 과학에서 메모리 누수() 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다. 즉, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생한다. 일부 서적에서 메모리 손실이라는 용어로 뜻을 옮기기도 하지만 leak라는 표현은 단순히 잃는 것 이상의 개념이므로 누수라는 표현이 더 정확하다.

결과 

특히 다음의 경우, 메모리 누수에 대하여 더 심각하고 중요하게 고려하여야 한다.

 메모리를 할당하며 오랫동안 실행되는 프로그램(서버의 백그라운드 작업이나 임베디드 장치)
 메모리 할당 주기가 짧은 경우(컴퓨터 그래픽의 프레임 단위 처리)
 공유 메모리와 같이 프로그램 종료 후에도 해제되지 않는 메모리를 할당하는 경우
 임베디드 시스템이나 휴대용 장치와 같이 사용 가능한 메모리가 제한적인 경우
 운영 체제나 메모리 관리자의 내부
 시스템의 신뢰성에 심각한 영향을 미치는 경우(장치 드라이버)
 프로그램을 종료할 때 운영체제에서 메모리 해제를 수행해 주지 않는 경우.

C에서의 단순 예시 
다음 C 함수는 할당된 메모리의 포인터를 손실함으로써 메모리 누수를 일으킨다.

#include <stdlib.h>

void function_which_allocates(void) {
    /* allocate an array of 45 floats */
    float *a = malloc(sizeof(float) * 45);

    /* additional code making use of 'a' */

    /* return to main, having forgotten to free the memory we malloc'd */
}

int main(void) {
    function_which_allocates();

    /* the pointer 'a' no longer exists, and therefore cannot be freed,
     but the memory is still allocated. a leak has occurred. */
}

같이 보기 
 버퍼 오버플로
 메모리 관리
 메모리 디버거

각주

외부 링크 
  Memory Leak Detection in C++ - Cal Erickson
  Memory Leak Detection in Embedded Systems - Cal Erickson

소프트웨어 버그