본문 바로가기

Programming/C/C++

C++/동적 메모리 할당과 메모리 누수(memory leak)

반응형

메모리 누수 (memory leak)

동적으로 할당받은 메모리의 주소를 잃어버려 힙에 반환할 수 없게 되면 메모리 누수가 발생한다.

메모리 누수가 계속 발생하는 루틴이 계속 반복 될 경우, 프로그램 종료 되고 다시 시작 하기 이전까지 실행 중에는 메모리를 할당받을 수 없는 심각한 상황이 발생할 수 있다.


메모리 누수 예시 1

1
2
3
char n = 'a';
char *= new char[1024];
= &n;
cs


위 코드에서 new로 할당 받은 1024 바이트의 메모리 누수가 발생한다. 위 코드에서 처음 *p는 동적으로 할당한 1024바이트의 메모리 주소를 가지고 있었지만, p 가 n의 주소값을 가지게되면서 1024바이트의 메모리 주소를 반환할 수 없게 된다.


메모리 누수 예시 2

1
2
3
4
char *p;
for(int i=0; i<1000000; i++) {
    p = new char [1024];
}
cs


위 코드의 p는 새로 할당 받는 1024 바이트의 메모리를 가리켜 이전에 할당 받은 메모리의 누수가 발생하고, 한 번 for문을 실행할 때마다 1024바이트의 메모리 누수가 발생한다. 전체 100000번의 루프를 돌면 약 1GB(1024*1000000)의 메모리 누수가 발생한다. 

반응형