2017-08-25 7 views
1

[EDIT] Fehler war irgendwo anders als @litelite mich, für mehr Antworten keine Notwendigkeit, herauszufinden, halfZugriffsverletzung in Factory-Methode

Ich habe Factory-Methode MakeDevice in meiner Fabrik-Klasse aufgerufen, die einen Zeiger auf eine Basisklasse zurückgibt Objekt (zeigt jedoch abhängig von einer Bedingung auf ein Objekt einer der untergeordneten Klassen).

Beim Ausführen des Programms erhalte ich eine xC0000005: Zugriffsverletzung Fehler. Die Linie, die die Visual Studio-Debugger an den Haltestellen ist die folgende:

ret = new DeviceA; 

Code: Die Basisklasse ist BaseDevice und die beiden untergeordneten Klassen sind deviceA und DeviceB. DeviceModel ist ein Enum-Typ, um es einfacher zu machen.

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; 
} 

Hat jemand etwas ähnliches erlebt? Ich habe gelesen, dass dies der richtige Weg ist, um diese Art von Fabrik zu realisieren. Ich bin auch offen für Design-Änderungen, solange ich die Methoden in einer Basisklasse auf die gleiche Weise abstrahieren kann.

+4

Was ist im 'DeviceA' Konstruktor? – litelite

+1

Bitte versuchen Sie, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns. –

+3

Wenn ein Fehler auftritt, gibt Ihre Funktion einen nicht initialisierten Zeiger zurück. –

Antwort

0

Sie sollten auch ret mit nullptr initialisieren.