Absturz bei Vector
-
Hallo, ich versuch's ganz kurz zu halten. Wahrscheinlich mach ich irgendeinen sehr dummen Fehler :(!
Ich habe einen vector
vector<KlasseA> vecADas ist Klasse A:
class A { public vector<KlasseB*> vec; //[...] };Klasse A besitzt also einen Vektor mit Zeigern auf Klasse B:
class B { public double wert1; int wert2; //[...] };Jetzt bekomme ich von irgendwoher einen Vector mit Zeigern von Klasse B geliefert.
Diesen gehe ich schrittweise durch und mache folgendesvector<KlasseA> vecA; for(int i=0; i<B_Vector.size(); ++i) { A objA; B *pTmp = new B(); /* Kopie von B erzeugen: Die folgenden Werte kann ich mir auch ausgeben lassen, * es existieren definitiv die entsprechenden Objekte von B in dem Vektor B_Vector */ pTmp->wert1 = B_Vector[i]->wert1; pTmp->wert2 = B_Vector[i]->wert2; objA.vec.push_back( pTmp ); // Lass ich diese Zeile weg, erfolgt bei "vecA.push_back(objA);" kein Absturz mehr (in dieser Zeile stürzt das Programm nicht ab) vecA.push_back(objA); // Absturz nach ein paar Schleifendurchgängen }Darf ich in der Forschleife keine lokalen Instanzen von A anlegen? Oder geht bei den Pointern was durcheinander?
Wäre toll wenn mir da eben ein profi helfen könnte

-
Hast du mal versucht, die Instanzen von A auf dem Heap anzulegen?
-
1. Brauchst du wirklich Zeiger innerhalb des Containers (zum Beispiel weil du Polymorphie nutzt)? Wenn du nämlich von Zeigern wegkommen kannst, hast du schon sehr viele mögliche Fehlerquellen beseitigt - z.B. Memory Leaks, doppelte
deletes auf den gleichen Speicherbereich, Dangling Pointers, ...2. Falls du Zeiger brauchst, kopiere die Instanzen doch über den Kopierkonstruktor.
B* ZeigerAufKopie = new B(Original);3. Was willst du genau erreichen? Einen Container kopieren? Das ginge ebenfalls viel einfacher, wenn nur Instanzen statt Zeigern gespeichert würden.
-
3. Was willst du genau erreichen? Einen Container kopieren? Das ginge ebenfalls viel einfacher, wenn nur Instanzen statt Zeigern gespeichert würden.
Den VektorB bekomme ich zugespielt. ich brauche diese Objekte später selbst, will sie deshalb kopieren (sonst werden sie evtl. von jemand anderem aus diesem Vektor gelöscht).
Ist denn so auf dem ersten Blick kein Fehler zu erkennen?
-
Ah ok, botschaft angekommen. Ich ersetze gerade mal die Zeiger auf B durch Instanzen
-
Kopie eines Containers mit Instanzen:
std::vector<B> Original; // irgendein gefüllter Container std::vector<B> Kopie = Original; // und alles ist erledigtEinfach, oder?
