2017-08-25 28 views
1

[EDIT]エラーがどこかでした(実際には、条件に応じて子クラスの1つのオブジェクトを指します)。アクセス違反

プログラムを実行すると、xC0000005:アクセス違反エラーが発生します。 基底クラスがBaseDeviceであり、2つの子クラスはDeviceAとDeviceBです:

ret = new DeviceA; 

コード:Visual Studioのデバッガで停止行は次のようです。 DeviceModelは、簡単にするための列挙型です。

BaseDevice *DeviceFactory::MakeDevice(DeviceModel model) { 
    BaseClass *ret; 
    switch(model) { 
     case model_deviceA: 
      ret = new DeviceA; // debugger stops here 
      break; 
     case model_deviceB: 
      ret = new DeviceB; 
      break; 
     default: 
      printf("error"); 
      break; 
     } 
    return ret; 
} 

何か類似した経験がありますか?私は、これがこの種の工場を実装する正しい方法だと読んだことがあります。同じ方法でベースクラスのメソッドを抽象的に使用できる限り、私は変更を設計するためにオープンしています。

+4

'DeviceA'コンストラクタの内容は何ですか? – litelite

+1

[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 –

+3

エラーが発生した場合、関数は初期化されていないポインタを返します。 –

答えて

0

retもnullptrで初期化する必要があります。