카테고리 없음

new ,delete (메모리 동적 할당)

zuyo 2019. 5. 9. 01:38
반응형

일반적으로 변수를 선언할 때 사용하는 정적할당은 변수를 저장을 위한 메모리가 프로그램 실행 전에 미리 할당되는 것이다.

반면에 동적할당은 프로그램 실행 중에 필요한 만큼의 메모리를 요청한다.

선언
자료형* 포인터변수 = 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;
반응형