2012-02-11 4 views
4

나는이 작업을 해왔고 제대로 작동하지 않는 것 같습니다. 포인터 목록의 마지막 값을 반환하고 인쇄하고 싶지만 매우 난수가 인쇄됩니다. 나는 이것이 포인터의 메모리 주소라고 가정하지만, 역 참조 할 때, 내 출력은 여전히 ​​똑같은 일을한다.int 포인터의 값을 프린트

내 Pointerlist 같이, 포인터의 목록입니다

int* end() { return (pointerList.back()); } 

하는 I는 그것을 호출 오전 방법이있다 : 예를 들어 list<int*> pointerList

,이 반환 나의 방법이다.

이 값은 메모리 주소가 아닌 값입니다. 아무도 아이디어를 어떻게 해결할 수 있습니까?

미리 감사드립니다.

편집 : [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 같은 값의 목록을 그리고 나는 다음과 같은이 목록의 다른 부분을 가리키는 포인터의 목록이 있습니다 : 여기 은 무엇 INT 포인터가 가리키는입니다

을 내 헤더 파일에 int* end() { return (pointerList.back()); }을 내 .cpp 파일에서 전화 :
[0,4,8,12] 

나는 코드가

INT * totry = ca.end(); cout < < * totry;


입니다 내 pointerlist 선언하는 방법

class ptrList 
    { 
    public: 
     std::list<value_type> listOfValues; 
     std::list<*int> pointerlist; 

내가 "추가"기능을 내부에 내 목록 포인터를 작성하고 내가 이런 식으로 작업을 수행합니다

int lstsqrt = 4; 
for (int a = 1; a < lstsqrt; a++) 
{ 
    int endptr = a + (int)lstsqrt; 
    pointerlist.push_back((&*listOfValues.begin() + endptr)); //((lstsqrt - 1) + a) ); 

} 

을 그리고 이것이 내 end() 메소드

int* end() {return (pointerlist.back());} 

그러면이 값이 내 toTry 변수로 전달됩니다.

pointerlist.push_back((&*listOfValues.begin() + endptr)); 

귀하의 listOfValuesstd::list, 따라서 그 값이 메모리의 연속 된 블록에 저장되지 않습니다

+0

목록의 'int *'는 (으)로 무엇입니까? 더 많은 코드를 보여주십시오. –

+0

이 질문에 대한 답변을 어떻게 알 수 있습니까? –

+0

@Greg Hewgill 죄송합니다. int 포인터가 가리키는 포인터를 보여주는 코드를 추가했습니다. – SSS

답변

6

하나의 문제는이 라인이 될 가능성이 높습니다. 따라서 listOfValues.begin()으로 첫 번째 요소의 반복자를 가져오고 *을 사용하여 반복기를 역 참조하고 의 주소를 사용하여 int*이되도록 한 다음, 어떤 값을 추가하여 메모리에 어딘지 알려줍니다 입니다. 대신이 일을

보십시오 : 당신이 반복자endptr를 추가

pointerlist.push_back((&*(listOfValues.begin() + endptr))); 

이 (목록을 따라 전진하는), 다음 역 참조하고, 주소를 가지고.사실 + 대신 advance을 사용해야 할 수도 있습니다.

+0

'std :: list' 반복기는 무작위 액세스가 아니며, 그렇지? 그래서 operator'(iterator, offset)'을 지원하지 않을 것이다. –

+0

@BenVoigt : 나는 기억할 수 없다. (컴파일러는 내가 알아야 할 때 알려준다!) 그래서'advance'에 대한 주석을 추가했다. 동일한 작업을 수행하십시오. –

+0

@GregHewgill 방금 시도했지만 제대로 구현하지 않아야합니다. "Illegal Indirection"오류가 발생하고 "&"값이 필요합니다. " 이것은 구현 방법입니다. 'listOfPointers.push_back (& ​​(advance (listOfValues.begin(), endptr)))' – SSS

관련 문제