2012-04-19 3 views
1

두 포인터가 포함 된 구조체가 있습니다. < 머리글, 반복기> 두 포인터가 다른 구조체 - 노드를 가리 킵니다.포인터 할당이 디버깅 중에 작동하지 않습니다.

typedef struct Map_t { 

    Node head; 
    Node iterator; 

} Map_t; 

typedef struct Node_t* Node; 

struct Node_t { 
    MapDataElement Data; 
    MapKeyElement Key; 

    struct Node_t *next; 
}; 

typedef struct Map_t *Map; 

나는 머리와 같은 위치에 반복자 포인터 지점을 만들고 싶어. 를 heres 전에 Debbuging과 라인을 실행 해 후 :

라인 전에 enter image description here

라인 enter image description here

당신이 볼 수 있듯이, 라인을 실행 한 후, -지도 후 > iterator는 여전히 0x0을 가리 킵니다. 왜 그런가요?

+0

컴파일러 최적화와 관련이 있습니까? 최적화없이 구축 할 때 이런 현상이 발생합니까? 이후 단계 후에 업데이트가 발생합니까? – TJD

+2

"NULL"을 가리키고 있지 않습니다 (다른 값이 변함에 따라 알 수 있듯이). 그러나 이클립스는 여전히 그것을 'NULL'로 표시합니다. 이클립스 버그? – user7116

답변

1

map->iterator의 멤버에 대한 변경 사항을 강조한 두 번째 그림에서 알 수 있듯이 포인터 할당이 발생하는 것으로 보입니다. 이 메소드가 완료되어 포인터 0x9918f0을 반환한다고 생각합니다.

이것은 포인터 할당에서 실제로 오류가 발생하지 않았지만 디버거 (Eclipse)가 업데이트 된 값을 표시하지 못하는 경우에 발생합니다. 이는 Eclipse의 버그로 인한 것일 수도 있고 Eclipse에서 사용할 수있는 디버깅 정보 부족으로 인한 것일 수도 있습니다. 주어진 예제만으로 말하기는 어렵습니다.