동적 메모리 할당: 함수가 호출될 때마다 새로 할당되고, 함수를 빠져나가도 유지되는 변수
malloc, free 정의
#include <stdlib.h>
void* malloc(size_t size); //힙 영역 메모리 할당, 해당 메모리 주소값 반환, 실패 시 NULL반환
void free(void* ptr); // 힙 영역 할당된 메모리 공간 해제
* 선언방식
int *ptr_i = (int*)malloc(sizeof(int));
double* ptr_da = (double*)malloc(sizeof(double)*9; // 배열처럼
- type casting 하지 않으면 해당 메모리에 저장 불가능함!
- malloc은 실패 시 NULL을 반환하므로, 메모리가 배당되었는지 확인하는 코드를 작성해야 한다.
- 동적 할당 된 메모리는 프로그램 종료 시 운영체제에 의해 다 삭제되지만, 프로그램이 길어질 경우 더 이상 사용하지 않는 동적 할당 메모리는 free 해줘야 메모리 공간 부족 사태 방지 가능
calloc
#include <stdlib.h>
void* calloc(size_t elt_count, size_t elt_size); //성공시 메모리 주소값 반환 실패시 null반환
- elt_count: 할당할 블록의 갯수
- elt_size: 블록 하나당 바이트 크기의 정보
* malloc이 쓰레기값을 채우는 것과 다르게 비트를 0으로 초기화
- 당연 free 필요
realloc
#include <stdlib.h>
void* realloc(void* ptr, size_t size);
ptr이 가리키는 메모리 크기를 size 크기로 조절해라 (확장)
반환하는 주소값이 기존 것과 같을 수도, 다를 수도 (뒤에 여부 메모리 공간이 있느냐에 따라)
'언어 > C&C++ 응용' 카테고리의 다른 글
[TS] Invalid address specified to RTlValidateHeap & DLL개념 (0) | 2021.06.14 |
---|---|
[C] 이중포인터 (0) | 2021.06.14 |
[TS] strcpy, strcpy_s (0) | 2021.06.14 |
[C] include, include guard(#idndef) (0) | 2021.06.14 |
[C] 구조체(struct), 공용체(union), 열거형(enum) (0) | 2021.06.14 |