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 |