ProjectH4C 2기 코딩도장 Unit 35

P4C

2020. 7. 27. 22:32

반응형

지금까지는 포인터에 변수의 메모리 주소를 저장하는 방식으로 포인터를 사용했지만,

이번에는 포인터에 원하는 만큼 메모리 공간을 할당받아 사용하는 방법을 설명해줍니다.

여기서 malloc는 memory allocation의 약자입니다.

그냥 메모리를 사용할 땐 malloc함수를 사용해서 공간을 확보해주어야 합니다.

#include <stdio.h>
#include <stdlib.h>    // malloc, free 함수가 선언된 헤더 파일

int main()
{
    int num1 = 20;    // int형 변수 선언
    int *numPtr1;     // int형 포인터 선언

    numPtr1 = &num1;  // num1의 메모리 주소를 구하여 numPtr에 할당

    int *numPtr2;     // int형 포인터 선언

    numPtr2 = malloc(sizeof(int));    // int의 크기 4바이트만큼 동적 메모리 할당

    printf("%p\n", numPtr1);    // 006BFA60: 변수 num1의 메모리 주소 출력
                                // 컴퓨터마다, 실행할 때마다 달라짐

    printf("%p\n", numPtr2);     // 009659F0: 새로 할당된 메모리의 주소 출력
                                // 컴퓨터마다, 실행할 때마다 달라짐

    free(numPtr2);    // 동적으로 할당한 메모리 해제

    return 0;
}

이렇게 할당한 메모리에 값을 저장하려면 *변수 = 값 으로 해주면 된다.

메모리 내용을 한꺼번에 설정하기 위해서는 memset함수를 이용해주면 된다.

  • memset(포인터, 설정할값, 크기);
    • void *memset(void *_Dst, int _Val, size_t _Size);
    • 값 설정이 끝난 포인터를 반환

메모리가 할당되지 않은 포인터도 있는데 바로 Null 포인터라는게 있다.

NULL이 들어있는 포인터를 널 포인터라고 하며 아무것도 가리키지 않는 상태를 뜻하기에 역참조도 불가능핟.

실무에서는 포인터가 null인지 확인하고 null이면 메모리를 할당하는 패턴으로 사용된다.

35.6 연습문제: 메모리 할당하기

malloc(sizeof(int));

malloc(sizeof(long long));

심사문제

int *numPtr1;
int *numPtr2;
numPtr1 = malloc(sizeof(int));
numPtr2 = malloc(sizeof(int));

반응형

'P4C' 카테고리의 다른 글

ProjectH4C 2기 코딩도장 Unit 34  (0) 2020.07.26
ProjectH4C 2기 Codeup 91 ~ 100  (0) 2020.07.19
ProjectH4C 2기 Codeup 81 ~ 90  (0) 2020.07.19
ProjectH4C 2기 Codeup 71 ~ 80  (0) 2020.07.19
ProjectH4C 2기 Codeup 61 ~ 70  (0) 2020.07.17