Ich stoße auf den folgenden Fehler.Vektor bezogene Speicherzuweisung Frage
- Ich habe eine Klasse
Foo
. Instanzen dieser Klasse sind in einem std :: vectorvec
vonclass B
gespeichert. - in Klasse Foo, ich erstellen eine Instanz der Klasse A durch Zuweisen von Speicher mit
new
und Löschen dieses Objekts in~Foo()
.
der Code kompiliert, aber ich bekomme einen Absturz zur Laufzeit. Wenn ich delete my_a
von Desstructor der Klasse Foo
deaktivieren. Der Code läuft gut (aber es wird ein Speicherleck geben).
Könnte jemand bitte erklären, was hier falsch läuft und eine Reparatur vorschlagen?
danke!
class A{
public:
A(int val);
~A(){};
int val_a;
};
A::A(int val){
val_a = val;
};
class Foo {
public:
Foo();
~Foo();
void createA();
A* my_a;
};
Foo::Foo(){
createA();
};
void Foo::createA(){
my_a = new A(20);
};
Foo::~Foo(){
delete my_a;
};
class B {
public:
vector<Foo> vec;
void createFoo();
B(){};
~B(){};
};
void B::createFoo(){
vec.push_back(Foo());
};
int main(){
B b;
int i =0;
for (i = 0; i < 5; i ++){
std::cout<<"\n creating Foo";
b.createFoo();
std::cout<<"\n Foo created";
}
std::cout<<"\nDone with Foo creation";
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
Dank Neil. Wie sollte ich dann Instanz der Klasse A erstellen? Ein Code-Snippet würde sehr geschätzt werden. Auch, wie Kopie Konstruktor und Zuordnung Operator Code aussehen würde. Vielen Dank – memC
Neil du hast einen Tippfehler ... neu A (f.mein_a); -> neues A (* f.my_a); – TimW
Hallo Neil, vielen Dank für das Code-Snippet. Eigentlich möchte ich das 'int val' für' my_a' übergeben, während Foo in den Vektor eingefügt wird. wie mache ich das? -> Ich möchte so etwas: (natürlich funktioniert es nicht) 'vec.push_back (Foo(): my_a (40)' – memC