동적 할당 함수

2023. 2. 8. 11:47C언어/기본 개념

728x90

동적할당: 프로그램 실행중에 입력되는 값을 처리하기 위해서는 실행중에 메모리저장 공간 확보

함수 호출을 통해서 저장 공간 확보

 

#include <stdlib.h>

malloc(확보하고자 하는 저장 공간의 크기(바이트 단위))

int* p;
p = (int*)malloc(sizeof(int));
if (p = NULL) { printf("메모리 부족"); exit(1); }
*p = 10;
scanf("%d", &(*p)); //p

free(p); // 할당 했던 영역 다시 회수(반납)

 

프로그램 메모리 영역

  1. 코드 영역
  2. 데이터 영역(정적지역변수, 전역 변수...)
  3. 스택 영역(지역변수 할당 된 메모리 영역)
  4. 힙 영역(동적 할당 함수)

그 중 힙 영역에 할당한다.

힙 영역: 메모리에 연속된 저장공간에 할당 한다. 그렇기 때문에 메모리에 제대로 할당 됐는지 확인이 필요하다.

 

 

calloc(5, sizeof(int)) ≒ malloc(5*sizeof(int))

인수가 두개 첫번째는 배열처럼 쓰고 싶을 경우 calloc(배열 요소의 개수, 배열요소 크기)

calloc은 배열의 값을 0으로 다 초기화 해주지만(대신 시간이 걸림) malloc은 초기화 해주지 않는다.

realloc(p, 8) 기존 포인터 p 4바이트에서 4를 더 키우고 싶을 경우.

realloc(사용하고 있는 포인터, 전체 크기 포함해서 원하는 크기)  // 메모리 할당 크기를 줄이거나 늘리고 싶을 때 사용

예시

p = (int*)malloc(5*sizeof(int));  // 20바이트

p = (int*)realloc(p, 10*sizeof(int));  // 200바이트

728x90

'C언어 > 기본 개념' 카테고리의 다른 글

구조체  (0) 2023.02.09
동적 할당 저장 공간의 활용  (0) 2023.02.09
함수 포인터와 void 포인터  (0) 2023.02.07
이중포인터, 배열 포인터  (0) 2022.12.26
[C] 다차원 배열  (0) 2022.12.02