동적할당
1) 포인터 변수 선언 (stack)
2) new를 통한 heap 메모리에 임시 배열생성
ㄴ new 자료형[배열크기]
3) 선언한 변수에 배열대입 [인덱스 0~]
4) delete[] 포인터명 : heap 메모리 삭제
1. 동적메모리는 반드시 포인터 변수에 저장해야 한다.
2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다.
// 1. 동적메모리는 반드시 포인터 변수에 저장해야 한다.
int *a = new int; // heap 메모리에 한개 생성
int *b = new int[3];// heap 메모리에 3개 생성
// 2. 동적메모리는 메모리 누수를 막기 위해 삭제하는 기능이 있다.
delete a;
delete[] b;
// Stack & Heap
int num = 10;
int arr[3] = {0};
// . 가변 : 동적할당
// . 배열 선언 시, '배열의 크기는 상수'로 할당
int size = 5;
int *p = new int[size]; // O
//int p[size] = {0}; // X : error
// size는 변수
// (const로 상수선언 시, 사용가능 : 권장X)
delete[] p;
p[0] = 10;
p[1] = 20;
p[2] = 30;
p[3] = 40;
p[4] = 50;
for(int i=0; i<count; i++){
printf("%d ", p[i]);
}
* malloc() 함수의 사용 / Memory Allocation
ㄴ (포인터자료형) malloc( 할당할사이즈 );
void main() {
printf("%d\n", sizeof(char)); // 1
char* p = new char[10];
char* m = (char*)malloc(sizeof(char) * 10);
printf("sizeof(p) : %d\n", sizeof(p)); // 8 : 포인터의 사이즈
printf("sizeof(m) : %d\n", sizeof(m)); // 8
printf("sizeof(p) : %d\n", _msize(p)); // 10 : 포인터가 가리키는 대상의 사이즈
free(p);
free(m);
char* a = new char[10];
printf("sizeof(a) : %d\n", sizeof(a)); // 8 : 포인터의 사이즈
printf("sizeof(a) : %d\n", _msize(a)); // 10 : 포인터가 가리키는 대상의 사이즈
delete[] a;
system("pause");
}
* malloc()
* calloc() / Contiguous Allocation
ㄴ (포인터자료형) calloc( 개수, 자료형사이즈 );
* realloc() / Re Allocation
ㄴ (포인터자료형) calloc( 재할당대상, 할당할사이즈 );
# include <stdio.h>
# include <stdlib.h>
int main(){
//
int size = 5;
int *p = (int*)malloc(sizeof(int)*size);
for(int i=0; i<size; i++){
p[i] = i +1;
}
//p = (int*)calloc(size+1, sizeof(int));
//size++;
p = (int*)realloc(p, sizeof(int)*(size*2));
size *= 2;
for(int i=0; i<size; i++){
printf("%d ", p[i]);
}
return 0;
}
'C > ☞' 카테고리의 다른 글
[55]-A. 가변 배열 컨트롤러 (0) | 2020.07.27 |
---|---|
[55] 가변 배열 컨트롤러 (0) | 2020.07.27 |
[52] 문자열 함수 (0) | 2020.07.27 |
[51] 문자열 기본 (0) | 2020.07.27 |
[00]-A. 캐릭터 이동 (0) | 2020.07.24 |
댓글