동적할당 배열 디버그

비주얼스튜디오에서 아래의 코드와 같이 동적할당한 배열은 디버깅을 하기에는 애로사항이 많습니다. a 배열은 사실상 포인터 변수로 비주얼 스튜디오는 우리가 의도한대로 배열인지, 배열이라면 배열의 크기는 몇인지 알지 못합니다. 따라서 디버깅시에 메모리 창을 보면 a 포인터가 가리키고 있는 데이터를 출력합니다.

1
2
3
4
5
6
7
8
int main(void) {
int* a = new int[10];
for (int i = 0; i < 10; i++) {
a[i] = i;
}

return 0;
}

디버깅 화면 1

하지만 우리는 a포인터가 배열이기를 의도하였으니, 디버깅시에도 배열의 상태이 궁금할 것입니다. 그렇다면, 동적할당한 배열의 메모리 상태를 알고자 한다면 어떻게 해야하는지 알아보겠습니다.

이를 가능하게 하기 위해선 단순히 Visual Studio 디버거에게 a 포인터가 해당하는 배열의 범위를 알려주면 됩니다. a 배열에서 배열의 크기는 10임으로 메모리 조사식에 a, 10을 입력하게 되면 a의 주소를 시작으로 10칸의 메모리 상태를 보여줍니다.

디버깅 화면 2

2차원 배열의 경우

코드를 먼저 살펴보겠습니다. 10x10 형태의 2차원 배열을 만든후, 0 ~ 99까지의 값을 대입합니다. 동적할당한 2차원배열도 마찬가지입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(void) {
int** a = new int*[10];
for (int i = 0; i < 10; i++) {
a[i] = new int[10];
}

int v = 0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
a[i][j] = v++;
}
}

return 0;
}

이러한 경우라면 아래와 같이 각 인덱스마다 범위를 지정해주면 됩니다.

디버깅 화면 3