💡 동적 메모리 할당이란 프로그램이 실행 도중에 동적으로 메모리를 할당 받는 것을 말한다. 프로그램에서는 필요한 만큼의 메모리를 시스템으로부터 할당받아서 사용하고, 사용이 끝나면 시스템에 메모리를 반납한다. 필요한 만큼만 할당을 받고 또 필요한 때에 사용하고 반납해 메모리를 효율적으로 사용할 수 있는 것이다. 동적 메모리는 malloc() 계열의 라이브러리 함수를 사용하여 할당받아 사용할 수 있다.
동적 메모리는 메모리의 유연한 관리를 위해 사용한다. 마치 수납공간에 물건을 꺼내는 것과 비슷하다.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *pi; // 보통 이렇게 작성 pi는 pointer integer의 약자
pi = (int *)malloc(sizeof(int));
// malloc은 메모리를 할당해라 라는 뜻
// 메모리를 얼마나 할당할지는 괄호 안에 있디.
// 그냥 4를 넣어도 되는데 보통 sizeof(int)를 한다.
// 그 다음 그 부분의 주소를 가리키도록 한다.
// (int *)로 형 변환을 해줌으로써 pi라는 변수가 해당 위치를 기억할 수 있도록 해줌
// 이 부분은 외우다시피 할 정도로 많이 볼것
printf("%d", pi); // 526411808100 -> 1004562464100 매번 할 때마다 바뀜
if(pi == NULL)
{
printf("동적 메모리 할당에 실패\n");
exit(1); // 프로그램 종료
}
*pi = 100;
printf("%d\n", *pi);
// 동적 메모리를 사용한 이후에는 무조건 해당 메모리를 반환함 -> 시스템 안정성을 높이기 위해
free(pi);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *pc = NULL;
int i = 0;
pc = (char *)malloc(100 * sizeof(char));
// 100을 곱함 -> 하나의 문자가 들어갈 공간을 100개 만든것
// 사실상 배열과 동일
if(pc == NULL)
{
printf("동적 메모리 할당에 실패");
exit(1);
}
// pc가 가리키는 포인터를 1씩 증가시키며 알파벳 소문자를 삽입
for(i = 0; i < 26; i++)
{
*(pc + i) = 'a' + i;
}
// 아스키코드 0은 NULL을 의미 즉 문자열이 종료됨을 의미
*(pc+i) = 0;
printf("%s\n", pc);
free(pc);
return 0;
}
에그타르트를 받았다.🥚
잘 먹었습니당. 😋