2013-02-01 85 views
10

はい私は*がポインタであることを知っています。それは私が話していることではありません。私のプログラムの1つにはブレークポイントが設定されていて、その自動車で変数__vfptrの値が0x000007feed210a00であることがわかりました。タイプ `*`は__vfptrを意味しますか?

しかし、タイプの下で、それはちょうど*と言いました。私のプログラムの他のポインタはすべて、unsigned char*またはsome::namespace::Frame*、またはint*のようなタイプでした。ポインタは特定のクラスまたはデータ型に直接結びついているため、これらの意味があります。しかし、実際には単純なポインタ型が存在するかどうかわかりません。

EDIT:私は2010年

+0

正確なコード行を投稿できますか? –

+1

どのデバッガを使用しますか? – Necto

+1

'__vfptr'は、仮想関数へのポインタを示すようです。デバッガが正確なタイプを解決できなかった可能性があります。 –

答えて

11

__vfptrVirtual method tableが含まれており、それが相続に動的結合可能にする情報が含まれているVisual Studioを使用しています。

virtual functionsを解決するにはfunction pointersのような情報が含まれ、クラスとその親に関する情報が含まれます。

+2

それはそれよりも多くのモエを含んでいます。 –

5

答えは明らかに実装に依存し、正式にはC++ではなくデバッガに関係します。しかし実際には、_vptrのいくつかの変形は、_vtableへのポインタの多かれ少なかれ一般的な意味であり、正式な標準で定義されているという意味ではない名前であり、これにはすべての種類の情報仮想関数とRTTIの解決に必要なものです。したがって、_vptrは、ポインタ、オフセット、および他の多くの異なるもののテーブルへのポインタです。デバッガはおそらく、このターゲットに名前をつけたり、その構造を記述したりすることを避けるだけです。

関連する問題