본문 바로가기
정글

TIL(14일차) 메모리누수

by 진득한진드기 2023. 5. 5.

C언어로 RB트리 구현하기 첫날이다.

 

먼저 C언어 대해서 가볍게 리마인드하고 가는 날이기도하다.

 

C언어에서는 malloc()이라는 함수로 힙 영역의 메모리를 할당 받는데

 

할당 방식은 다음과 같다.

 

malloc함수

 

사진 참고 : https://www.geeksforgeeks.org/dynamic-memory-allocation-in-c-using-malloc-calloc-free-and-realloc/

 

malloc를 사용하는데는 조심해야되는데 메모리 누수가 일어날 수도 있기 때문이다.

 

메모리 누수

 

메모리 누수의 사전 정의는 다음과 같다.

 

 

"메모리 누수(memory leak) 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비된다."

 

불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못관리 할 때 발생하는 현상을 의미한다.

 

 

대략적인 코드를 보면 다음과 같다.

 

#include <stdio.h>
#include <stdlib.h>

int main(){
    int *firstpointer = (int *)malloc(sizeof(int));
    
    int *secondpointer = (int *)malloc(sizeof(int));
    b = a;
    
    free(a);
    free(b);
    
    return 0;
}

 

위와 같이 코드를 짜면

 

b가 다시 a를 가르키게 되므로 memory leak(메모리 누수)가 일어난다.

 

보통 반복문 안에서 말록을 할당하고 반복문 밖에서 해제할때 일어날 수 있다.

 

그러므로 malloc이나 다른 메모리를 할당하는 함수를 선언을 하면 바로 아래에 free를 사용하고 중간에 내용을 적는게 효율적이다.

 

아니면 동적메모리 할당을 한 포인터를 참조하는 다른 포인터변수를 만들어 사용하거나, 

 

따로 if 문을 만들어서 예외처리하는 코드안에 free를 사용한다.