본문 바로가기

과제모음

[C++]2차원 배열의 동적할당과 해제

반응형

오늘은 2차원 배열의 동적할당에 대하여 알아보겠습니다. C 나 C++등 기타 언어를 배우신 분들이라면
동적할당이 무엇인지 잘 알고 계시리라 생각합니다.
간단하게 설명하자면 사용할 메모리의 영역의 크기를 정하지 않고 입력되는 데이터에 따라서
메모리의 크기가 가변적으로 변하는 것을 동적할당이라 생각하시면 되겠습니다. 절대 무한한데이터를 입력할수는 없죠
메모리의 크기가 유한이니 언젠가는 메모리 용량이 넘어서게 될테니까 말이죠 단지 요즈음의 메모리 크기가
워낙에 커졌기 때문에 무한한것처럼 느껴질뿐입니다.

1차원의 경우에는 C++의 경우 동적할당이 아주 쉽습니다. 먼저 포인터형의 변수를 선언해줍니다.
int *value;

선언을 하셨으면 자신이 원하고자하는 크기를 입력받은후에 다음과 같이 하면 끝입니다.
value = new int[Input value] 

해제하는 방법은 더 쉽죠.
delete [] value 

배열을 동적할당한 경우 해제할때 꼭 [] 기호를 넣어주셔야 합니다. 안그러면 배열의 시작주소값만 사라지고
뒤의 데이터는 메모리에 계속 남아있게 되니까 말이죠.

이제 2차원 배열을 동적할당으로 선언하고 해제해 보겠습니다.
우선 포인터변수를 선언해줍니다. 이중포인터로 해주시면 되겠습니다.(행과열을 동적할당해야하기때문)
int **value;

선언을 하셨으면 역시 설정할 크기를 입력받은후에 new 를 사용하여 동적할당을 해줍니다.
다만 조금은 다른방법을 사용하게 됩니다.
value = new int *[Inputvalue];
for(int i=0; i<Inputvalue; i++){
   value[i] = new int [size];
}


먼저 행을 동적할당한후에 열을 다시 동적할당한다고 생각하시면 되겠습니다.
사용을 다한후에는 해제를 해야 메모리에 남는데이터가 없겠죠?? 분해는?!?! 조립의 역순입니다.
for(int i=0; i<Inputvalue; i++){
     delete []value[i];
}
delete []value;

위와같이하면 정방형의 2차원배열이(2X2,3X3....) 동적할당되고 해제되게됩니다.
정방형이 아닌 2차원 배열을 선언하실경우에는 값을 따로입력받거나 따로 설정을 해주시면 되겠습니다.


반응형