반응형
메모리 누수 (memory leak)
동적으로 할당받은 메모리의 주소를 잃어버려 힙에 반환할 수 없게 되면 메모리 누수가 발생한다.
메모리 누수가 계속 발생하는 루틴이 계속 반복 될 경우, 프로그램 종료 되고 다시 시작 하기 이전까지 실행 중에는 메모리를 할당받을 수 없는 심각한 상황이 발생할 수 있다.
메모리 누수 예시 1
1 2 3 | char n = 'a'; char *p = new char[1024]; p = &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)의 메모리 누수가 발생한다.
반응형
'Programming > C/C++' 카테고리의 다른 글
C/고수준 파일 입출력/파일 포인터 지정 및 반환 (0) | 2017.10.26 |
---|---|
C/고수준 파일입출력/파일 기술자 (0) | 2017.10.26 |
C++/객체와 객체 배열의 동적 생성 및 반환 (0) | 2017.10.26 |
C++/동적 메모리 할당 및 반환 (0) | 2017.10.26 |
C++/CPPRESTSDK_VisualStudio에 설치 및 라이브러리 관리 (0) | 2017.10.25 |