본문 바로가기

컴퓨터/C

C dynamic Allocation 메모리 동적 할당

I. 할당

1. malloc

#include <stdlib.h>

void* malloc(size_t size) //size_t size: 할당하고자 하는 메모리의 크기. 바이트 단위

성공 시 할당된 메모리의 첫 번째 주소 리턴, 실패 시 NULL 포인터 리턴

2. calloc

#include <stdlib.h>

void* calloc(size_t elt_count, size_t elt_size)
/*
  size_t elt_count: 변수의 개수
  size_t elt_size: 변수의 크기
*/

성공 시 할당받은 메모리의 포인터(void* 형), 실패 시 NULL 리턴

elt_size 크기의 변수를 elt_count개만큼 저장할 수 있는 메모리 공간을 힙 영역에 할당한다.

II. 해제

#include <stdlib.h>

void free(void* ptr)

전달된 포인터가 가리키는 메모리 공간이 해제된다.

III. 재할당

#include <stdlib.h>

void* realloc(void* memblock, size_t size);

⊙ memblock: 재할당 대상 포인터

 size_t size: 재할당할 사이즈

IV. 예

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

void function(int);
  
  int main (void) {
     int m=0;
     fputs("배열의 크기를 입력하세요: ", stdout);
     scanf("%d", &m);
    function(m);
 
    return 0;
 }
 
void function(int i) {
//int array[i]; 불가
  int* array = (int*)malloc(sizeof(int)*i); //동적 메모리 할당
//array = (int*)realloc(array, sizeof(int)*(i+1)); //동적 메모리 재할당
  int j;

  if(array==NULL) {
    puts("메모리 할당에 실패!");
    exit(1); //비정상 종료
  }

//동적 할당한 메모리 사용
  for(j=0; j<i; j++) array[j]=j+1;
  for(j=0; j<i; j++) printf("%d ", array[j]);
  printf("\n");
  free(array); //할당된 메모리 소멸
}

'컴퓨터 > C' 카테고리의 다른 글

C Macro 매크로  (0) 2022.11.01
C 실행 파일의 생성 순서  (0) 2022.11.01
C 메모리  (0) 2022.11.01
C fopen, fclose 파일의 개방과 종료  (0) 2022.10.31
C 열거형  (0) 2022.10.31