상세 컨텐츠

본문 제목

동적 메모리 할당

Coding/자료구조(with C)

by 세미531 2021. 10. 17. 01:58

본문

728x90

동적 메모리 할당 (dynamic memory allocation)

동적 메모리가 할당되는 공간을 히프(heap) 라고 한다. 히프는 운영체제가 사용되지 않는 메모리 공간을 모아 놓은 곳이다. 전형적인 동적 메모리 할당 코드는 아래와 같다.

int *p;
p = (int *)malloc(sizeof(int)); //동적 메모리 할당
*p = 1000; //동적 메모리 사용
free(p); //동적 메모리 반납

1. malloc() 함수는 size 바이트 만큼의 메모리 블록을 할당. malloc() 은 동적 메모리 블럭의 시작 주소를 반환. 반환되는 주소의 타입은 void *이므로 이를 적절한 포인터로 형변환시켜야 함. 메모리 확보가 불가능하면 NULL을 함수의 반환값으로 반환.

 

2. 동적 메모리는 포인터로만 사용할 수 있다. *p 는 p 가 가리키는 장소이다.*p = 1000; 문장을 실행하면 p 가 가리키는 장소에 1000이 저장.

 

3. free() 함수는 할당된 메모리 블록을 운영체제에게 반환. 여기서 주의할 점은 malloc() 함수가 반환했던 포인터 값을 잊어버리면 안됨. 포인터값을 잊어버리면 동적 메모리를 반환할 수 없다. 또한 malloc() 의 반환값이 NULL 인지도 항상 확인해야 함.

 

이제 정수 10개를 저장할 수 있는 메모리를 동적으로 할당해보자.

#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include <malloc.h>

#define SIZE 10

int main() {

  int *p;

  p = (int *)malloc(SIZE*sizeof(int));
  if (p == NULL) {
    fprintf(stderr,"메모리가 부족해서 할당할 수 없음\n");
    exit(1);
  }
  for (int i = 0; i<SIZE; i++) 
    p[i] = i;

  for (int i = 0; i<SIZE; i++)
    printf("%d ",p[i]);


  free(p);
  return 0;
}

 

 

 

 

728x90

관련글 더보기

댓글 영역