2014-10-03 2 views
0

Visual Studio 2012 Express를 사용하여 64 비트 응용 프로그램을 디버깅합니다. 의 클래스 C의 일부 멤버 함수는 '갑'과 '바'모두를 가정 해 봅시다'this'포인터가 멤버 함수를 호출 한 후에 변경됩니다.

처럼

'푸'보이는 : 그것은 내부에 갔을 때 '이'포인터가 변경되기 때문에

void foo() { 
    bar(); // change to this->bar() works! 
} 

내 프로그램이 충돌 '바'. 'this-> bar()'로 변경하면 문제를 해결할 수 있습니다.

이 문제를 어떻게 디버깅해야합니까? 감사합니다

+0

'이 포인터가 변경되었습니다.'라는게 무엇을 의미합니까? foo가 포함 된 클래스의 인스턴스를 더 이상 가리 키지 않는다는 것을 의미합니까? 아니면 다른 인스턴스? – harmic

+0

최소한이지만 완전한 예를 게시하십시오. –

답변

0

당신은 다음 코드가 작동한다는 것을 의미합니까? (1) 다른 비 멤버 함수 막대가 있는지()을 갖는 동일한 :

void foo() { 
    this->bar(); // instead of bar() 
} 

그래서 foo에()를 추정하는 동일한 개체에 대한 다른 멤버 함수 바()를 호출하는 멤버 함수는 두 가지를 확인한다 멤버 함수 bar()의 서명, 비 멤버 함수 이름을 변경 op는 항상 좋은 프로그래밍 실습으로서 멤버 함수 호출을 위해 this->로 한정한다. (2) 어떤 객체 인스턴스 나 포인터에 대해 foo()를 호출하면 객체 인스턴스에 객체가 올바르게 할당되고 초기화되었는지 확인하십시오.

관련 문제