다음은 thread입니다. 관련 문제를 공유하고 싶습니다 : totalview에서 2D 배열로 int **를 다이빙하는 방법은 무엇입니까? (여기에서는 그 해법이 논의 됨). 누군가가 똑같은 문제에 직면 할 경우, 이것이 도움이되기를 바랍니다!totalview에서 다이나믹 2D 배열을 만드는 방법
당신이 스택 프레임에서 array2D 다이빙 할 때의이 TotalView,에서 지금
int ** array2D = new int * [5];
for (int i = 0; i < 5; i++) {
array2D[i] = new int [5];
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
array2D[i][j] = i + j;
}
}
을 다음과 같이 내가 설정 동적 2 차원 배열을 내 코드에 있다고 가정 해 봅시다, 변수 창이 나타나며,이 같은 것을 표시해야 :
Expresion: array2D, Address: 0x7fffd50efbc8
Type: int **
Value: 0x02234660 -> 0x02234690 -> 0x00000000 (0)
다음 단계는 크리스 Gottbrath은 내가 위에서 언급 thread에 언급 된 것과 유사하지만, 정확히 우리가 형식을 캐스팅해야하는시기와 방법의 측면에서 약간 복잡를 가져옵니다. 따라서
1 단계 : 중간 마우스를 클릭하거나 값을 두 번 클릭하여 포인터를 역 참조 할 포인터 값을 다이브합니다.
이렇게하면 당신에게 같은 것을 제공한다 :
Expresion: *(((int **)array2D)), Address: 0x02234660
Type: int *
Value: 0x02234690 -> 0x00000000 (0)
단계를 2 : 유형을 이제 한 단계 캐스트. '유형'채널에서 int *를
int *[5]
으로 변경합니다. 그런 다음 enter를 누릅니다. 이 방법으로 디버거는 array2D가 크기가 5 인 포인터 목록을 가리키는 포인터임을 알게됩니다. 동적 배열은 포인터 목록을 가리키는 포인터입니다. 이제, 위의 값은 다음과 같이 변경합니다 :
Field Value
[0] 0x02234690 -> 0x00000000 (0)
[1] 0x022346b0 -> 0x00000001 (1)
[2] 0x022346d0 -> 0x00000002 (2)
[3] 0x022346f0 -> 0x00000003 (3)
[4] 0x02234710 -> 0x00000004 (4)
우리는 지금 array2D이 하위 목록에 대한 포인터 5 개 요소를 가지고 참조하십시오. 이제 우리가 이러한 요소 중 하나에서 다이빙을한다면, 아직 정수 목록을 얻지 못할 것입니다. 정수를 보려면 우리가 들어가는 각각의 다이빙에 대해 다시 한번 역 참조 할 필요가 있습니다.
단계 3 : array2D [2] [0]에서 array2D [0] [4]까지의 정수를 확인하기 위해 요소 [2]에서 다이빙을한다고 가정 해 봅시다. 우리는 지금 가정 정수를 포함하는 하위 목록 번호 2를 가리키는 포인터를 찾고 있습니다
Expresion: (((int *[5])*(((int **)array2D))))[2], Address: 0x02234670
Type: int *
Value: 0x022346d0 -> 0x00000002 (2)
: 우리는 패널에서 해당 행을 마우스 가운데 버튼을 클릭하면, 우리는이를 참조하십시오.
4 단계는 :
Expresion: *(((int *)(((int *[5])*(((int **)array2D))))[2])), Address: 0x022346d0
Type: int
Value: 0x00000002 (2)
5 단계 : 자, 역 참조에 한 번 더 시간 다이빙, 우리는 다음과 같이 표시되어야합니다 이제 두 번째 수준에서 유형 캐스트. '유형'채널에서 int를
int [5]
으로 변경 한 다음 Enter 키를 누릅니다. 그리고 거기에 우리가 가서 우리가 array2D [2] [0] 요소 참조 - array2D [2] [4]
Field Value
[0] 0x00000002 (2)
[1] 0x00000003 (3)
[2] 0x00000004 (4)
[3] 0x00000005 (5)
[4] 0x00000006 (6)
다이빙 1D 배열은 간단하지만, 2 차원 배열 다이빙에 필요한 것을주의 깊게 다이빙 및 - 캐스팅 순서.다른 방법을 시도했지만 제대로 작동하지 않았습니다. 그래서, 나는 이것이 같은 문제에 비틀 거린 사람에게 유용 할 수 있기를 바랍니다.