지난번 구조체에 이어서 동적할당에 대해 알아보겠습니다.
동적할당은 이제 자료구조 들어갈 때 배우는 것 같습니다.
동적할당
동적할당
: 중간에 메모리 공간 할당 받고, 원하는 시점에 해제하는 방식
형태 | ex) |
할당) #include <stdlib.h> 저장할 공간의 자료형* 변수명; 변수 = (주소를 저장할 변수의 자료형)malloc(크기(byte)); |
#include <stdlib.h> double* ETH; ETH = (double*)malloc(8); |
해제) free(변수); |
free(ETH); |
크기 팁: sizeof(자료형) * 원하는 개수 |
ETH = (double*)malloc(sizeof(double)*2); |
공간 크기별 접근법 | ex) |
자료형 크기 하나일때) *변수 |
*ETH |
자료형 크기가 여러개일때) 변수[인덱스] |
ETH[0] , ETH[1] ...... |
동적할 당은 이와 같이 우리가 중간에 메모리 공간을 할당 할 수 있습니다.
변수 선언하는 것과 비슷하지만 중간에 해제할 수 있다는 것이 다른 점입니다.
그럼 형태를 봐보았으니 활용해보겠습니다.
활용하기
다음 코드를 봐보겠습니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double* ETH;
ETH = (double*)malloc(8);
printf("현재 ETH 값: ");
scanf("%lf", ETH);
printf("ETH: %f", *ETH);
free(ETH);
return 0;
}
double 자료형의 포인터 변수를 선언하고 malloc를 활용하여 메모리 공간을 할당하여 주었습니다.
그리고 사용후 free로 메모리공간을 해제하여 주었습니다.
그럼 결과를 봐보겠습니다.
그럼 이와 같은 결과가 나옵니다. 보기에는 그냥 변수 선언해서 하는 것과 차이는 별로 없어 보이지만 시스템 내부적으로는 메모리 공간을 할당 받고, 해제했다는 차이점이 존재합니다. 이렇게 공간을 할당해 줄때 여러개 할당해주는 것도 가능합니다.
활용하기2
그러면 여러개를 선언한느 코드를 만들어 보겠습니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
double* coin;
coin = (double*)malloc(sizeof(double) * 3);
printf("현재 BTC, ETH, XRP 값: ");
scanf("%lf %lf %lf", &coin[0], &coin[1], &coin[2]);
printf("BTC: %.2f\n", coin[0]);
printf("ETH: %.2f\n", coin[1]);
printf("XRP: %.2f\n", coin[2]);
free(coin);
return 0;
}
이렇게 메모리 공간을 double 자료형 3개 만큼의 크기를 할당해주었습니다.
그럼 결과를 확인해보겠습니다.
이렇게 인덱스를 활용하여 마치 배열처럼 사용 가능한 것도 알 수 있었습니다.
오늘은 동적할당에 대해 알아보았습니다. 동적할당은 자료구조에서 자주 쓰이는 만큼 기본 형식만 잘 알아두는 것을 추천합니다.
댓글