include
#include <stdlib.h>void *malloc(size_t size);
인자
- size할당할 byte의 수
우리가 배열을 선언할 때 3칸이 필요하다! 4칸이 필요하다! 알 수 있으면 편하다.
하지만 얼마만큼이 필요한지 모를땐? 혹은 프로그램이 실행 도중에 더 큰 공간이 필요하게 된다면??
그럴때 malloc함수가 필요한 것이다. malloc함수는 프로그램이 실행되는 도중에 상황에 따라 가변적으로 메모리 공간을 사용하게 해 주는 동적할당을 해주기 때문에 프로그램 실행 당시에 얼마나 필요한지 몰라도 배열을 사용할 수 있다.


우선은 포인터 형식 의 변수를 선언해 주고
그 곳에 malloc으로 할당된 메모리 공간의 주소를 변수에 넣어주는 방식으로 사용이 되고,
malloc()안의 값에 따라서 할당될 Byte수가 정해진다.
이런 식으로 malloc함수는 메모리 공간을 할당해주고 그 할당된 메모리 공간의 주소를 void*의 형태로 리턴을 해 주고 그 리턴된 값은 포인터 변수 arr에 저장이 된다.
왜 void*의 형태로 리턴이 될까??
이유는 변수가 모두 동일한 자료형이 아니기 때문이다. int형태일수도 있고 double의 형태일수도 있고, 구조체일수도 있다. 이 자료형마다 해당되는 크기가 다르기 때문에 void*의 형태로 리턴을 해주는 것이다.
어? 맨 밑에 free는 뭐지??
이런 굉장히 편한 malloc에도 단점은 있다. 바로 필요한 만큼 사용하고 사용이 끝나면 꼭 free를 통해서 할당을 해제해 주어야 한다.
다른 대부분의 변수들은 자기가 속해있는 함수가 끝난다면 자동으로 메모리영역에서 삭제가 된다. 하지만 우리가 동적할당으로 메모리 공간을 할당해 준다면 함수가 끝나도 사라지지 않고 프로그램이 종료될 때까지 계속 메모리 공간에 남아있어서 자리를 차지하고 있게 된다.