Heap 메모리와 동적 메모리 할당

문성원·2024년 1월 4일
0

1) 목표

2) 소스 코드

// 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;
}

3) 이해한 내용 정리

4) 출처

이 작성글은 금배씨 영상 중 "Heap 메모리와 동적 메모리"를 참조하여 작성되었습니다.

profile
EasyWin32를 통해 C언어를 공부하고 있습니다~

0개의 댓글

관련 채용 정보