問題タブ [virtual-table]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
194 参照

c++ - 仮想メソッド テーブルに格納されているアドレスを使用した仮想関数への関数呼び出しがガベージを返すのはなぜですか?

概念の理解度をテストする演習として、仮想テーブルのアドレスから仮想関数を呼び出しています。しかし、仮想メソッド テーブルの理解に突破口ができたと思った途端、まったく理解できない別の問題に遭遇しました。

以下のコードCarでは、メンバー変数 x と 2 つの仮想関数 first と second を含む というクラスを作成しました。ここで、仮想テーブルをハッキングして、これら 2 つの仮想メソッドを呼び出します。最初の関数は正しい答えを返しますが、2 番目の関数は、初期化された値ではなく、ランダムな値またはガベージを返します。

誰かが私が間違っていることを指摘できれば幸いです。また、これはコンパイラによって動作が異なるため、c++14 を使用してhttp://cpp.sh/でテストしています。

そのコード出力は、「ガベージ」の 2 番目の出力が変更される可能性がある場合に出力されます。