본문 바로가기
c언어

c언어 동적 메모리 사용하는 기본 예제 풀어보기(정수를 저장할 수 있는 동적 메모리 생성하기, 성적 처리 프로그램 작성하기, 동적 메모리에 구조체를 저장할 수 있는 공간 할당 받기)

by 개발자 L 2023. 2. 27.
반응형

c언어 동적 메모리 사용하는 기본 예제 풀어보기(정수를 저장할 수 있는 동적 메모리 생성하기, 성적 처리 프로그램 작성하기, 동적 메모리에 구조체를 저장할 수 있는 공간 할당받기)

네 안녕하세요, 이번 포스팅에서는 동적 메모리를 이용한 기본적인 예제를 한 번 작성해 보도록 하겠습니다.

동적 메모리가 c언어에서 정말 많이 쓰이는 부분인걸 감안하여 따로 예제를 작성하는 부분을 만들기로 했습니다.

그럼 모두들 열심히 연습하셔서 좋은 정보 많이 얻어가시길 바라겠습니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 정수를 저장할 수 있는 동적 메모리 생성하기

제일 먼저 해볼 건 정수를 저장할 수 있는 동적 메모리를 생성하는 것입니다.

동적 메모리를 사용하기 위해서는 할당 및 생성이 기본이기 때문에 잘 알아야 합니다.

그럼 지금부터 한 번 작성해보도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *list;

    list = (int*)malloc(sizeof(int));

    if(list == NULL)
    {
        printf("동적 메모리 할당 오류\n");
        
        exit(1);
    }

    list[0] = 10;
    list[1] = 20;
    list[2] = 30;

    free(list);

    return 0;
}

이렇게 작성을 했습니다.

만일에 할당 오류가 나면 에러 메시지가 출력이 될 것이고,

아니라면 아무것도 뜨지 않습니다.

반응형

 

2. 성적 처리 프로그램 작성하기

이번에는 성적 처리 프로그램을 작성해보도록 하겠습니다.

성적 처리 프로그램을 그냥 동적 메모리만 할당받아 작성하는 것이기 때문에 그렇게 어렵지 않을 것입니다.

그럼 지금부터 한 번 해보도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int *list;
    int students, i;

    printf("학생의 수를 입력하세요 : ");
    scanf("%d", &students);

    list = malloc(students * sizeof(int));

    if(list == NULL)
    {
        printf("동적 메모리 할당 오류\n");

        exit(1);
    }

    for(i = 0; i < students; i++)
    {
        printf("학생 #%d 의 성적 : ", i + 1);
        scanf("%d", &list[i]);
    }

    printf("====================\n");

    for(i = 0; i < students; i++)
    {
        printf("학생 #%d의 성적은 %d 입니다.\n", i + 1, list[i]);
    }

    printf("====================\n");

    free(list);

    return 0;
}

이렇게 작성을 해봤습니다.

그럼 결과를 보도록 하겠습니다.

학생의 수를 입력하세요 : 3
학생 #1 의 성적 : 40
학생 #2 의 성적 : 68
학생 #3 의 성적 : 87
====================
학생 #1의 성적은 40 입니다.
학생 #2의 성적은 68 입니다.
학생 #3의 성적은 87 입니다.
====================

결과도 잘 나온 것을 확인할 수 있습니다.

 

3. 동적 메모리에 구조체를 저장할 수 있는 공간 할당받기

이번에는 동적 메모리에 구조체를 저장할 수 있는 공간을 할당받아보도록 하겠습니다.

여기서 만일에 구조체 배열이 필요하다면 구조체의 크기에다가 필요한 개수를 곱해주면 됩니다.

그럼 바로 보여드리도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Book
{
    int number;
    char title[50];
};

int main()
{
    struct Book *p;

    p = (struct Book *)malloc(2 * sizeof(struct Book));

    if(p == NULL)
    {
        printf("동적 메모리 할당 오류\n");

        exit(1);
    }

    p[0].number = 1;
    strcpy(p[0].title, "C Programming");

    p[1].number = 2;
    strcpy(p[1].title, "Data Structure");

    free(p);

    return 0;
}

이렇게 작성을 해봤습니다.

여기서도 오류가 있다면 오류 메시지를 화면에 띄울 것이고,

아니라면 그냥 문제 없이 넘어갈 것입니다.

 

여기까지 동적 메모리를 이용한 기본적인 예제를 작성해 봤는데요,

다음 포스팅에서는 calloc()과 realloc()에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글