반응형
지금까지는 포인터에 변수의 메모리 주소를 저장하는 방식으로 포인터를 사용했지만,
이번에는 포인터에 원하는 만큼 메모리 공간을 할당받아 사용하는 방법을 설명해줍니다.
여기서 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 |