は、我々は出力として(私がテストした)C++はどのように関数とオブジェクトをメモリに格納しますか?
class A
{
int x;
public:
void sayHi()
{
cout<<"Hi";
}
};
int main()
{
A *a=NULL;
a->sayHi();
}
上記のコードは、ターボCにコンパイルされたクラスや印刷Hi
を考えてみましょう。
a
がNULL
なので、クラッシュが予想されました。もっとオーバー私はsayHi()
機能は、仮想作れば、それは
Abnormal temination(Segmentation fault in gcc)
言う私はそれの多くは実装依存である知っているが、誰がどのような実装にいくつかの光を投げたり、単にそれが本当にいいだろう概観を与えることができれば。
ヌルポインタによるメソッドの呼び出しは、未定義の動作です。何かが起こる可能性があります。クラッシュする必要はありませんが、標準では許可されています。 –
C++の人ではないので、これは推測ですが、あなたのコードは 'A'のインスタンスのメモリにアクセスする必要はありません。 'sayHi()'はフィールド 'x'を使用せず、仮想ではないので解決するためにvtableにアクセスする必要はありません。 C++コンパイラは実際には 'a'がエラーを引き起こす有効なポインタであるかどうかを確認するためにチェックを挿入する必要があります。 – millimoose