반응형
일반적으로 변수를 선언할 때 사용하는 정적할당은 변수를 저장을 위한 메모리가 프로그램 실행 전에 미리 할당되는 것이다.
반면에 동적할당은 프로그램 실행 중에 필요한 만큼의 메모리를 요청한다.
선언
자료형* 포인터변수 = new 자료형
int* iptr = new int;
해제
delete 포인터변수
delete iptr;
동적할당으로 확보한 메모리는 더이상 사용하지 않는다면 해제해준다.
정적으로 할당된 변수들은 컴퓨터 기억장소중 스택(Stack)에 할당되는 반면, 동작할당은 힙(Heap)에 할당되는데,
힙에 할당 된 메모리를 해제하지 않으면 프로그램이 종료될 때까지 지속되어 메모리 누수가 발생한다.
int* pi = new int;
*pi = 100;
cout << *pi << endl;
delete pi;
배열의 메모리 동적 할당
1차원 배열
int* Count = new int[10];
delete []Count;
2차원 배열
- 다차원 배열 메모리 해제는 선언한 차원의 역순으로 해제한다.
int** Count = new int*[10];
for(int i=0; i<10; i++) {
Count[i] = new int[100]; // 100개 짜리 Count 배열을 10개 생성
}
for(int i=0; i<10; i++) {
delete[] Count[i];
}
delete[] Count;
3차원 배열
int*** Count = new int**[10];
for(int i=0; i<10; i++) {
Count[i] = new *int[100];
for(int j=0; j<100; j++) {
Count[i][j] = new int[500];
}
}
for(int i=0; i<10; i++) {
for(int j=0; j<100; j++) {
delete[] Count[i][j];
}
delete[] Count[i];
}
delete[] Count;
반응형