2012-02-11 13 views
4

私はこれに取り組んできましたが、これは正しく動作しないようです。私はポインタリストの最後の値を返していますが、それを印刷したいのですが、非常に乱数を印刷しています。私はこれがポインタのメモリアドレスであると仮定しますが、逆参照すると、私の出力は同じことをします。intポインタの値を出力する

マイPointerlistは次のように、ポインタのリストである:

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

アン私はそれを呼び出していますどのように、これは次のとおりです。たとえばlist<int*> pointerList

、これは戻って私の方法があります。

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

これは値ではなくメモリアドレスを印刷しています。誰もがどのようにこれを解決するためのアイデアを持っていますか?

ありがとうございます!

EDIT:ここ はint型のポインタが指しているものです。 私は、このような[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] などの値のリストを持っていると私は次のようにそのリストのさまざまな部分を指すポインタのリストがあります:

を私のヘッダファイルに 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) ); 

} 

そして、これがありますmy 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私はこれを試しましたが、正しく実装してはいけません。私はエラー "不正な間接"を受け取り、 "&"はI値が必要です これは私がそれを実装する方法です: 'listOfPointers.push_back(&*(advance(listOfValues.begin()、endptr)))' – SSS

関連する問題