2012-06-12 3 views
2

다음은 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 차원 배열 다이빙에 필요한 것을주의 깊게 다이빙 및 - 캐스팅 순서.다른 방법을 시도했지만 제대로 작동하지 않았습니다. 그래서, 나는 이것이 같은 문제에 비틀 거린 사람에게 유용 할 수 있기를 바랍니다.

답변

1

4 년이 지났지 만,이 상황에서 나 자신을 발견하고이 질문에 대한 답을 찾았습니다. 대부분의 답변은 this knowledge base page에 있습니다. array2D

  1. 다이브 : 제대로 totalview에서 2D 동적 배열을 표시하는 방법

    . Totalview는 표현식을 *(array2D)으로 표시하고 유형을 TYPE *으로 표시합니다. 귀하의 경우 TYPEint입니다.

  2. 변경이 크기 A X B의 배열을 가지고 TYPE [B]*[A], 또는 동등 TYPE ([A]*)[B]에 유형 항목. 귀하의 경우에는 int [5]*[5]이됩니다. 어레이의 유효 범위는 [0][0] ~ [A-1][B-1]이어야합니다.

  3. 마우스 오른쪽 버튼으로 클릭하고 모두로 잠기기를 선택하십시오. 그러면 표현식이 (((TYPE[B]*[A])&*(array2D)))[:]TYPE[A][B]의 유형을 따라 바뀝니다. 전체 배열이 이제 Totalview에 표시됩니다.