// Visual Studio 2022 x86(32비트) 기준
// 힙 메모리와 동적 메모리 할당
// 일반 변수 선언 형식에 대응하는 동적 메모리 할당 코드
#include "pch.h"
#include <stdio.h>
#include <malloc.h> // malloc, free 함수를 사옹하기 위해서
int main()
{
int data;
int *p1 = (int *)malloc(sizeof(int)); // 4byte의 크기의 메모리를 할당 -> heap 형역(주소를 가리킴)
if (p1 != NULL)
{
data = 5;
*p1 = 5;
free(p1); // 할당한 메모리를 쓰고 싶지 않다면 해제
}
short num;
short* p2 = (short*)malloc(sizeof(short)); // 4byte의 크기의 메모리를 할당 -> heap 형역(주소를 가리킴)
if (p2 != NULL)
{
num = 5;
*p2 = 10;
free(p2); // 할당한 메모리를 쓰고 싶지 않다면 해제
}
short temp[5];
short* p3 = (short*)malloc(sizeof(short[5])); // 10 byte 메모리 공간 할당
if (p3) {
temp[3] = 2;
*(p3 + 3) = 2;
p3[3] = 2; // *(p + i) = p[i];
free(p3);
}
char test[3][4];
char(*p4)[4] = (char(*)[4])malloc(sizeof(char[3][4]));
if (p4) {
test[2][1] = 5;
(*(p4 + 2))[1] = 5;
p4[2][1] = 5;
*(*(p4 + 2) + 1) = 5;
*(p4[2] + 1) = 5;
free(p4);
}
char *p_array[3];
for (int i = 0; i < 3; ++i)
{
p_array[i] = (char *)malloc(sizeof(char[4]));
}
if (p_array[2])
{
*(p_array[2] + 1) = 5;
(*(p_array + 2))[1] = 5;
p_array[2][1] = 5;
*(*(p_array + 2) + 1) = 5;
}
for (int i = 0; i < 3; ++i)
{
if(p_array[i])
free(p_array[i]);
}
int group = 3, member = 4; // char[group][member];
char **pp = (char **)malloc(sizeof(char *)*group); // sizeof(char *[3])
if (pp) {
for (int i = 0; i < group; ++i)
{
*(pp + i) = (char*)malloc(sizeof(char)*member); // sizeof(char[4])
}
if (*(pp + 2)) // pp[2]
{
*(pp[2] + 1) = 5;
(*(pp + 2))[1] = 5;
pp[2][1] = 5;
*(*(pp + 2) + 1) = 5;
}
for (int i = 0; i < 3; ++i)
{
if (*(pp + i))
free(*(pp + i)); // pp[i]
}
free(pp);
}
// 프로그램 종료
return 0;
}
이 작성글은 금배씨 영상 중 "Heap 메모리와 동적 메모리"를 참조하여 작성되었습니다.