(この質問に関連します。)
基本クラスBase
と 2 つの派生クラスがDer1
ありDer2
ます。(基本的な実装については、リンクされた質問を参照してください。それぞれにいくつかのパブリック プロパティもあります。) 私のプログラムでは、次のBase
ような配列を作成します。
Base *array[10];
int count = 0; // program-wide count of how many objects are in the array
その後、次のようにDer1
andのインスタンスで埋めます。Der2
Der1 d = Der1();
d.x = 0; // Filling in public properties
d.y = 1;
d.z = 3;
array[count] = &d;
count++;
にほぼ同一のコードが使用されDer2
ます。
その後、配列を使用して、これらのクラスで定義された関数を呼び出します。
int result = array[i]->SomeFunction(x, y);
コードは正常にコンパイルされますが、実行しようとすると、「program.exe の 0x00232d60 で未処理の例外: 0xC000005: アクセス違反の読み取り場所 0x04064560」が発生します。
アクセスしようとしている配列内のオブジェクトを見ると、すべてのプロパティの値が本来の値ではなく 0.0000 になっています。2 つのdouble
型配列もあり、最後のいくつかの要素が初期化されていないように見えます (「1.572398880752e-311#DEN」または「-9.2559631349317831e+061」など)。
私は .NET をあまりにも長く使用しており、ポインターについて知っていたことの多くを忘れてしまいました。これが問題の原因であると想定しています...このエラーを修正する方法について何か提案はありますか?