[C++]배열의 크기를 변수로 설정하는 법(동적 배열)
※모든 내용은 필자의 부족한 머리와 서칭실력이 출처이므로 틀린점이 있을 수 있습니다.
프로그래밍 문제를 풀다가 조건에서 배열의 크기가 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]();