C++

[C++]배열의 크기를 변수로 설정하는 법(동적 배열)

퍼펙트코딩 2022. 4. 29. 16:27
728x90
반응형

<a href="https://www.flaticon.com/free-icons/c-" title="c++ icons">C++ icons created by Freepik - Flaticon</a>

모든 내용은 필자의 부족한 머리와 서칭실력이 출처이므로 틀린점이 있을 수 있습니다.

 

프로그래밍 문제를 풀다가 조건에서 배열의 크기가 1,000,000같이 광범위한 범위가 주어졌을 떄에는 직접 배열의 크기를

int arr[300];

for(int i=0;i<300;i++){
	arr[i];
}

같이 직접 설정할 수 없다.

배열의 크기는 직접 설정하는데 한계가 있고 많은 배열을 생성하기에는 런타임이 너무 길어지기 때문이다.

 

이 문제를 조금 더 이해 하기 위해서는 접은 글을 펼쳐주세요!

더보기

우리가 무엇인가를 생성하게 되면 "힙"영역과 "스택"영역중 하나에 저장됩니다.

 

힙 영역이란 동적으로 할당된 변수가 할당되는 영역으로 "스택 영역보다 느리지만 큰 사이즈를 요할 떄 좋습니다"

스택 영역이란 함수의 호출과 함께 할당되며 호출이 완료되면 소멸하며 "힙 영역보다 빠르지만 크기가 작습니다"

 

 

예를 들어 주방을 생각해 보았을떄 창고와 선반을 생각하시면 좋습니다.

창고는 용량이 큰 대신 짐을 나르러 가야하고 선반은 가까이 있지만 많은 양을 놔둘 수는 없습니다.

 

이러한 문제를 해결하기 위한 첫번째 방법으로는 배열을 동적으로 생성하는 방법이 있습니다.

 

int length;
cin >> length;

int* array = new int[length];

위와 같이 포인터를 사용하여 동적으로 배열을 할당해 사용할 수 있다.

 

new [] 연산자는 힙 영역에 동적으로 배열을 생성하고 배열이 저장된 주소값을 넘겨줍니다.

 

또한 배열의 사용이 끝났을 때는 delete[] 연산자를 사용하여 배열을 삭제해 주어야 합니다. (메모리리크, 메모리 누수 등)

 

※배열 값을 0으로 초기화 하는법

int* array = new int[n]();

 

728x90
반응형