2012-01-12 1 views
-2

を動作しません。(これはC++である) 私はシングルトンクラスポインタの割り当ては、私はシングルトンであるクラスABCを持つ

ABC *b = ABC::getInstance(); 
ABC* a; 
a=b; 

を行うと、私はデバッガで確認するときにbの値が割り当てられていませんa。デバッガで

0x00000000のように示されているとABCのメンバーのためのすべてのゴミ値の値(VS 2008デバッガ)

私は、デバッガのウォッチウィンドウで* bを行なったし、私は有効な値を参照してください、とき私はすべてのnull値とゴミ値を参照しています(これは上記の処理が終わった後です)。

+1

'std :: cout << static_cast (a)<<" "<< static_cast (")\ "" \ n "'どうすればいいですか? –

+0

私はここで何も間違っている - あなたのデバッガは正確に何を見ますか?アドレスを印刷してみましたか? –

+0

'getInstance()'が例外をスローしない場合、コードは正常に動作するはずです。 – iammilind

答えて

4

abはポインタです。

彼らが指しているアドレスは同じですが、具体的なアドレスは異なります。

もう1つの理由は、リリースモードでデバッグしていて、後で変数aを使用していない可能性があります。この場合、コンパイラはaの宣言と代入を単に省略することができます。

+0

ポインタの「特定のアドレス」とは何ですか?あなたのアドレス、 '&a'と'&b'を意味しますか? – thiton

+0

はい、私はそれらのために同じアドレスを取得していません...だから解決策は何ですか? – seahorse

+0

@seahorse *の場合は*、*の場合は*から* - 違いがあります。 – razlebe

1

デバッガが文a=b;を実行したことを確認してください。

デバッガで現在強調表示されている行はまだ実行されていません。コントロールを次の行に移動し、値を再度確認します。

これは馬鹿に聞こえるかもしれませんが、これが私が今考えることができる唯一の理由です。 Luchianグリゴールの答えから取ら

もう一つの理由は、:

もう一つの理由は、あなたがリリースモードでデバッグしている、とあなたは後で変数を使用していないということかもしれません。この場合、コンパイラはaの宣言と代入を単に省略することができます。

+0

デバッグモードでデバッグしています – seahorse

+0

ステートメント 'a = b'の後に文字列を割り当てようとしましたが、文字列が正しく割り当てられていますか。もしあれば、再び 'a'の値をチェックしてください。 – Azodious

+0

+1は、ユーザーが値をテストしている場所を確認するためのものです。私の直ぐに考えていたのは、「a = b行またはその後のブレークポイントですか?」です。 – icabod

関連する問題