malloc & free

2022. 4. 3. 02:51C++

동적할당 malloc과 free에 대해 알아본다. 

먼저 동적할당이란 프로그램 실행 중에 동적으로 메모리를 할당하는 것을 말한다. 

메모리를 할당할때, 힙 영역에 할당한다.  

중요한 점은 할당한 메모리는 free를 통해 꼭 해제해 주어야 한다. (그렇지 않는다면 메모리 누수가 발생한다. )

 

동적 메모리 할당은 다음과 같다.

(int *)malloc(sizeof(int)*4)

이는 아래 그림과 같이 힙 공간에 int타입 사이즈*4만큼의 메모리를 할당한 것이다. 

메모리에 동적 할당된 공간

이를 활용한 예시는 다음과 같다. 

#include <iostream>

using namespace std;

int main(void)
{
    int arr[4] = {1,2,3,4};
    int *pArr; 
    
    //int 타입 사이즈 *4 만큼의 메모리를 할당해라.
    pArr = (int *)malloc(sizeof(int)*4);    
    //malloc의 반환형이 void이기 때문에 (int *)을통해 형변환 한다.
    //sizeof()는 자료형은 바이트로 계산해주는 연산자. 

    for(int i = 0; i<4; i++)
    {
        pArr[i] = arr[i];
    }
	
    //메모리 할당을 해제하는 것을 잊지 말자.
    free(pArr);
    
    return 0;
}

 

아래는 malloc과 free를 사용한 예제이다 .

#include <iostream>
using namespace std; 

int main(void)
{
    int num;
    int *pArr;
    int aver = 0;
    
    cout<<"몇개의 과목을 입력하시겠습니까? "<<endl;
    cin>>num;
 
    //0 이하면 프로그램 종료
    if (num <= 0)
    {
        return 0;
    }
 
    //과목 개수 만큼 메모리 할당.
    pArr = (int*)malloc(sizeof(int) * num);
 
    //점수를 받고 저장합니다.
    for (int i = 0; i < num; ++i)
    {
       	cout<<"점수 입력: ";
		cin>>pArr[i]
	}
    
    //출력
    for (int i = 0; i < num; ++i)
    {
        cout<<
    }
    
    //평균 출력
    for (int i = 0; i < num; ++i)
    {
        aver+= pArr[i];
    }
    
    aver /= num;
    cout<<"평균: "<<aver;
    
    //동적할당 해제
    free(pArr);
 
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

출처: https://blockdmask.tistory.com/290 [개발자 지망생]

'C++' 카테고리의 다른 글

Member Initializer  (0) 2022.04.03
new와 delete  (0) 2022.04.03
Reference  (0) 2022.04.03
template  (0) 2022.04.02
call-by-reference & call-by-value  (0) 2022.04.02