본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #44 동적할당 malloc , free

안녕하세요! 저번편까지는 분명 포인터를 설명하고있었는데 갑자기 이상한놈들이 튀어나왔네요.

하지만 이녀석들은 메모리와 많이 관련되있는것들이기 때문에 메모리 주소를 담는 포인터와도 연관이 꽤 있습니다.

그래서 포인터를 설명하다말고 malloc이라는것을 설명해드리려합니다.


동적할당은 전역변수나 지역변수와 달리 프로그램이 실행되고 있는 도중에 메모리 공간을 할당할수 있는것입니다.


우선 malloc을 사용하기 위해서는 stdlib.h 라는 헤더파일을 포함해주셔야 합니다.

standard library ( 표준 라이브러리 ) 의 약자입니다.



위와같이 stdlib.h를 포함하신후 malloc( 크기 ) 를 호출해주시면 그 크기만큼 메모리 공간을 할당해주고 할당된 메모리공간의 주소를 반환합니다.


그래서 int형 포인터를 만들고 주소값을 저장해놓은것입니다.


하지만 위 예제는 별로 좋은 코드가 아닙니다.

왜냐하면 자료형의 크기는 컴파일러마다 다를수 있기때문입니다.


그렇기때문에 int형의 크기만큼 메모리공간을 할당받고싶다면 sizeof 연산자를 이용해서 할당받으면 됩니다.





sizeof연산자를 이용해서 4바이트의 메모리 공간을 할당받아도 정상적으로 작동됩니다.

만약 int형의 크기가 4바이트가 아닌 환경에서는 sizeof연산자를 사용하지 않을경우 버그가 생길수 있습니다.


그리고 sizeof연산자를 통해서 int형만큼의 크기를 할당받겠다고 써놓았기때문에 가독성도 올라갔습니다.

프로그래머가 어떤 의도로 코드를 작성했는지 한눈에 알아보기 쉬워졌습니다.



그리고 시작이 있으면 끝도 있어야죠.

할당받은 메모리 공간을 다시 자유롭게 풀어줄수 있습니다.

바로 free 함수를 호출해주시면 됩니다.




이렇게 free함수를 호출하고 다시 주소값을 담고있는 p를 인자로 넘겨주면 할당되었던 메모리공간을 다시 자유롭게 풀어줄수 있습니다.


물론 프로그램이 종료되면 free함수를 호출하지 않더라도 할당되었던 메모리들은 자동으로 모두 풀려납니다.

하지만 자기가 메모리공간을 할당받았으면 free로 다시 풀어주는것을 습관화 해주시는것이 좋습니다.