본문 바로가기
공부/C, C++

[C] 동적 할당 malloc( );

by 김샤랑 2022. 1. 10.

[C] 동적 할당 malloc( );


 

동적 할당을 배우기 앞서 이때까지 우리가 배운 변수들의 메모리 영역을 살펴보자.

 

메모리 영역

  • 스택
  • 데이터
  • ROM
  • 힙 영역(동적 할당)

 

변수

  • 지역 변수 (스택 영역)
  • 전역 변수, 정적 변수, 외부 변수 (데이터 영역)

변수, 포인터가 미리 선언된 것이 아닌, 프로그램이 실행이 되면 생기는 걸 만들고 싶다!

 


- 동적 할당이란?

  • 프로그램 실행 도중에 내가 원하는 만큼의 메모리를 요청할 수 있는 것.
  • 이때 사용하는 메모리 영역은 힙 영역이다.
  • 그곳에 내가 원하는 만큼의 크기의 메모리를 받고 주소를 받는다.
  • 거기를 어떻게 사용할지는 포인터를 통해 한다.
  • 같은 메모리 공간이어도 포인터 타입에 따라 바뀜.

 

int main()
{
  int* pInt = (int*)malloc(100);
  
  // main 함수가 시작되고 나서 다음에 주소를 준다. 100 바이트를 할당해두고 변수에게 주소를 준다
  // -> 그래서 포인터가 필요함

  float* pF = (float*)malloc(4);
  *pF = 1.23f;
  
}

 


- 왜 malloc는 void 타입일까?

   

 

malloc 반환 타입은 void 타입이다. 주소만을 저장하기 위한 목적이라 타입이 정해져 있지 않다.
void로는 원형이 없다 ->그래서 강제 타입 캐스팅을 해줌.

 

동적 할당해두는 메모리 입장해서는 어떤 타입인지는 내가 정한 포인터로 정해서 사용하면 된다.

malloc는 만들어지는 순간 목적이 없고, 요청한 만큼 메모리를 줄 뿐이다.

 


- 동적 할당

1. 런타임 중에 대응 가능

2. 사용자가 직접 관리해야 함(해제) -> free();

 

int* pInt = nullptr;

if(100 == iInput)
{
  pInt = (int*)malloc(100);
}

if(nullptr != pInt)
{ 
  free(pInt); 
  // free라는 함수는 내가 주소를 전달해 주면 그 주소가 가리키는 힙메모리를 해제 시켜준다.
}

return 0;

 

동적 할당은 언제 생길지도 상황에 따라 다를 수 있기에 만드는 것도, 해제도 직접 해제해줘야 한다.

free()라는 함수는 내가 주소를 전달해 주면 그 주소가 가리키는 힙 메모리를 해제시켜준다.

메모리 누수를 방지하기 위해 free()를 해줘야 한다.

 

 

 

'공부 > C, C++' 카테고리의 다른 글

[C] Bubble sort  (0) 2022.03.11
[C] 가변 배열 (malloc)  (0) 2022.01.10
[C] 구조체 포인터  (0) 2022.01.10
[C] wchar_t 함수 ( wcslen( ), wcscat_s( ) )  (0) 2022.01.09
[C] 문자열, wchar_t  (0) 2022.01.09

댓글