우선 int *p를 통하여 포인터변수 p를 선언했다.
동적으로 할당된 메모리를 사용하기 위해선, 힙 영역에 할당된 메모리의 시작 번지를 알아야 하므로 반드시 포인터 변수가 필요하다.
malloc 코드는 메모리를 할당해주는 코드이고, 그 안의 괄호값은 얼마만큼의 메모리를 할당할까에 대한 코드이다. int형이 4바이트이므로 저 괄호 안의 값을 4라고 해도 되겠지만, int가 항상 4바이트라는 보장이 없으므로, 여기 안에도 sizeof로 크기 계산을 해주는 것이 좋다.
malloc 앞에 (int*)로 형변환을 해주었다.
이 형변환을 해 주는 이유는, malloc 함수는 메모리만 확보하여 사용할 수 있게 해주는데, 그 안에 어떤 타입의 자료가 저장될 지 정해지지 않았기 때문에 void* 타입을 반환하기 때문이다.
이렇게 된다면, 저장될 타입이 미정인 메모리의 주소를 반환하는 것이기 때문에 저장할 타입에 맞춰 형변환을 해 주어야 한다.
이후 if안의 코드는, 포인터변수 안에 변수값으로 주소가 할당이 되지 않았을 경우 exit(1); 코드를 통하여 프로그램을 종료시킨다.
*p = 321;을 하고 *p를 출력하였으므로, 출력값이 321이 나오는 것은 일단 당연하다.
이후 free(p) 를 통해서 반드시 사용한 메모리를 반환해 주어야 한다.
동적 메모리 할당을 사용하고 나면, 메모리 반환은 필수적이다.
위 코드를 그림으로 다시 알아보자.
댓글 영역